以下代码正常工作 - 输出: 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
提交
取消