以下代碼正常工作 - 輸出: 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 回答
- 0 關注
- 216 瀏覽
添加回答
舉報
0/150
提交
取消