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)
    }

    上面会输出:

    大虾小虾大虾大虾

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

  • 相关阅读:
    通用权限管理设计 之 数据库结构设计 [转载]
    RBAC权限管理模型(转)
    C# ReportViewer报表 详解
    人生两支笔
    用C#编写ActiveX控件(一)
    SQL操作全集
    用C#编写ActiveX控件(二)
    Attribute在.NET编程中的应用(三)
    Attribute在.NET编程中的应用(四)
    winform自动升级
  • 原文地址:https://www.cnblogs.com/phpper/p/9934833.html
Copyright © 2011-2022 走看看