zoukankan      html  css  js  c++  java
  • Go中局部全局变量的区分

    这是可能也许是容易混淆滴,先上1个例子:

    package main
    import "fmt"
    var nickname = "大虾"
    func main() {
        show() //大虾
        change() //小虾
        show() //大虾
        fmt.Print(nickname) //大虾
    }
    
    func show() { print(nickname) }
    
    func change() {
        nickname := "小虾"
        print(nickname)
    }

    上面会输出:

    大虾大虾小虾大虾

    我们稍微改动下:

    package main
    import "fmt"
    var nickname = "大虾"
    func main() {
        show() //大虾
        change() //小虾
        show() //这里不再是 大虾 而是 虾
        fmt.Println(nickname) //这里不再是 大虾 而是 虾
    }
    
    func show() { print(nickname) }
    
    func change() {
        nickname = "小虾" // 注意这里不再是 nickname := "小虾"
        print(nickname)
    }

    上面会输出:

    大虾小虾小虾小虾

    可见声明的全局变量var nickname 在函数change里面重载更新了,再次输出时已经是被更新后的值。
    我们再看一个函数变量域

    package main
    var nickname string
    
    func main() {
        nickname = "大虾"
        print(nickname) //大虾
        change()
        println(nickname) //大虾
    }
    
    func change() {
        nickname := "小虾"
        print(nickname) //小虾
        show() //大虾 上面只是nickname := 只是初始化声明变量。仅在函数内有效,全局变量nickname未变
    }
    
    func show() {
        print(nickname)
    }

    上面会输出:

    大虾小虾大虾大虾

    通过上面几个例子,我想大家也应该有深入的理解啦。

  • 相关阅读:
    BootstrapTable表格数据左右移动功能遇到的问题(数据左右移动,列表拖拽排序,模糊查询列表数据定位)
    MVC校验
    线程
    验证码
    PublicLogic
    进程
    请求处理过程
    上传组件
    委托
    Global全局应用程序类
  • 原文地址:https://www.cnblogs.com/phpper/p/9934833.html
Copyright © 2011-2022 走看看