我是新來Golang所以它分配讓我瘋狂:在Go如何初始化成員結構
import "sync"
type SyncMap struct {
lock *sync.RWMutex
hm map[string]string
}
func (m *SyncMap) Put (k, v string) {
m.lock.Lock()
defer m.lock.Unlock()
m.hm[k] = v, true
}
後來,我只要致電:
sm := new(SyncMap)
sm.Put("Test, "Test")
在這一刻,我收到了零指針恐慌。
我用另外一個功能,並要求它周圍的工作new()
之後:
func (m *SyncMap) Init() {
m.hm = make(map[string]string)
m.lock = new(sync.RWMutex)
}
但我不知道,如果有可能擺脫這個樣板初始化的?
非常感謝!現在我記得,在教程中有一些關於構造函數的內容,但作爲一個Java開發人員,我認爲它應該與new運算符有關,而不是New ...代碼約定 – 2010-12-21 13:00:05
這會起作用,但不是最好的建議。 RWMutex應作爲一個值包含在內,而不是指針。它的零值是一個隨時可以使用的互斥體,這樣就可以避免顯式的構造函數。 – kelnos 2013-01-13 01:22:50
應該採取不同的名稱,因爲它只是一個例子。正如你將會看到的,我還初始化了不是原始結構的一部分的字段'foo'。 ;) – Mue 2013-01-14 10:49:50