为了账号安全,请及时绑定邮箱和手机立即绑定

Go 初始化运算符,包作用域变量 - 困惑:

Go 初始化运算符,包作用域变量 - 困惑:

Go
杨__羊羊 2021-08-01 06:07:39
以下代码正常工作 - 输出: You chose Test 1package mainimport (    "fmt")type TNameMap map[int]stringvar nameMap TNameMapfunc init() {    nameMap = make(TNameMap)    nameMap[1] = "You chose Test 1"    nameMap[2] = "You chose Test 2"    nameMap[3] = "You chose Test 3"}func main() {    fmt.Println(nameMap[1])}如果我注释掉init() ie 中 的第一行,运行//nameMap = make(TNameMap)时我会感到恐慌main(),因为nameMap从未初始化:panic: runtime error: assignment to entry in nil map但是- 如果init()我写nameMap := make(TNameMap)而不是nameMap = make(TNameMap),我没有恐慌,也没有输出 -main()只是运行并终止进程。我知道如果我使用 Initialization 运算符 - nameMap := make(TNameMap)我已经声明了一个nameMap仅作用域为init()函数的新变量,因此只有包级别变量 var nameMap TNameMap在 范围内main(),导致没有输出,因为包级别不var包含地图数据。但是,我很困惑:为什么我panic在那种情况下没有得到?如果 main()正在对包 var 进行调用,则它从未被初始化 - 那么为什么不panic呢?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信