I am new to Golang so allocation in it makes me insane:
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
}
and later, I just call:
sm := new(SyncMap)
sm.Put("Test, "Test")
At this moment I get a nil pointer panic.
I've worked around it by using another one function, and calling it right after new()
:
func (m *SyncMap) Init() {
m.hm = make(map[string]string)
m.lock = new(sync.RWMutex)
}
But I wonder, if it's possible to get rid of this boilerplate initializing?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…