Nullwerte für sync.Mutex
und sync.RWMutex
sind wirksam. Daher sind Zeiger auf Mutexe im Grunde überflüssig.
Nicht empfohlen:
mu := new(sync.Mutex)
mu.Lock()
Empfohlen:
var mu sync.Mutex
mu.Lock()
Wenn Sie einen Zeiger auf eine Struktur verwenden, sollte der Mutex ein Nicht-Zeiger-Feld der Struktur sein. Selbst wenn die Struktur nicht exportiert ist, sollten Sie den Mutex nicht direkt in die Struktur einbetten.
Nicht empfohlen:
type SMap struct {
sync.Mutex
data map[string]string
}
func NewSMap() *SMap {
return &SMap{
data: make(map[string]string),
}
}
func (m *SMap) Get(k string) string {
m.Lock()
defer m.Unlock()
return m.data[k]
}
// Das Mutex-Feld, die Lock- und Unlock-Methoden sind Teil des exportierten SMap-API, ohne explizite Deklaration.
Empfohlen:
type SMap struct {
mu sync.Mutex
data map[string]string
}
func NewSMap() *SMap {
return &SMap{
data: make(map[string]string),
}
}
func (m *SMap) Get(k string) string {
m.mu.Lock()
defer m.mu.Unlock()
return m.data[k]
}
// Der Mutex und seine Methoden sind Implementierungsdetails von SMap und sind für die Aufrufer nicht sichtbar.