Soy nuevo en Golang modo de asignación en que me hace loco:cómo inicializar miembros en Ir estructura
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
}
y más tarde, acabo de llamar:
sm := new(SyncMap)
sm.Put("Test, "Test")
En este momento recibo una nil puntero pánico.
He trabajado alrededor de ella utilizando otra función, y decir que es justo después de new()
:
func (m *SyncMap) Init() {
m.hm = make(map[string]string)
m.lock = new(sync.RWMutex)
}
Pero me pregunto, si es posible deshacerse de este inicialización repetitivo?
¡Muchas gracias! Ahora recuerdo, que había algo sobre constructor en el tutorial, pero, al ser un devloper de Java, pensé que debería estar relacionado con el nuevo operador, no con el nuevo ... código de convención –
Esto funcionará, pero no es el mejor consejo. El RWMutex debe incluirse como un valor, no como un puntero. Su valor cero es un mutex listo para usar, y de esta manera puede evitar una función constructora explícita. – kelnos
Debería haber tomado diferentes nombres, ya que solo es un ejemplo. Como verá, también inicializo el campo 'foo' que no es parte de la estructura original. ;) – Mue