Как инициализировать элементы в структуре Go

Я новичок в Golang, поэтому размещение в нем сводит меня с ума:

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)
}

Но мне интересно, можно ли избавиться от этого шаблона инициализации?

54
задан Illarion Kovalchuk 2 August 2016 в 08:43
поделиться