我是新来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