2 回答

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個贊
該函數(shù)Test作為值,所以它得到它自己的副本。當(dāng)函數(shù)返回時,所有更改test Test都將消失。取而代之Test的是:
func (test *Test) init(){
test.collection = make(map[uint64] Object)
}
但請注意,結(jié)構(gòu)Test已導(dǎo)出,方法init未導(dǎo)出,因此您的庫的用戶可能會創(chuàng)建一個Test但不能正確初始化它。似乎圍棋社區(qū)已經(jīng)建立了一種獨(dú)立NewType方法的約定:
type test struct{
collection map[uint64] Object
}
function NewTest() *test {
return &test{
collection: make(map[uint64] Object),
}
}
這確保了用戶只能test通過調(diào)用獲得 aNewTest并且它將按預(yù)期進(jìn)行初始化

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個贊
您應(yīng)該為該init方法使用指針接收器:
func (test *Test) init() { // use a pointer to test
test.collection = make(map[uint64] Object)
}
如果沒有指針,您正在為test對象的副本初始化映射。實(shí)際test對象永遠(yuǎn)不會獲得初始化的地圖。
- 2 回答
- 0 關(guān)注
- 169 瀏覽
添加回答
舉報