以下代码正常工作 - 输出: You chose Test 1
package main
import (
"fmt"
)
type TNameMap map[int]string
var nameMap TNameMap
func 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呢?
相关分类