以下代碼正常工作 - 輸出: 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 中 的第一行,運(yùn)行//nameMap = make(TNameMap)時(shí)我會(huì)感到恐慌main(),因?yàn)閚ameMap從未初始化:panic: runtime error: assignment to entry in nil map但是- 如果init()我寫nameMap := make(TNameMap)而不是nameMap = make(TNameMap),我沒有恐慌,也沒有輸出 -main()只是運(yùn)行并終止進(jìn)程。我知道如果我使用 Initialization 運(yùn)算符 - nameMap := make(TNameMap)我已經(jīng)聲明了一個(gè)nameMap僅作用域?yàn)閕nit()函數(shù)的新變量,因此只有包級(jí)別變量 var nameMap TNameMap在 范圍內(nèi)main(),導(dǎo)致沒有輸出,因?yàn)榘?jí)別不var包含地圖數(shù)據(jù)。但是,我很困惑:為什么我panic在那種情況下沒有得到?如果 main()正在對(duì)包 var 進(jìn)行調(diào)用,則它從未被初始化 - 那么為什么不panic呢?
- 1 回答
- 0 關(guān)注
- 215 瀏覽
添加回答
舉報(bào)
0/150
提交
取消