Wartości zerowe dla `sync.Mutex` oraz `sync.RWMutex` są skuteczne. Dlatego wskaźniki do mutexów są w zasadzie zbędne.
**Nie zalecane:**
```go
mu := new(sync.Mutex)
mu.Lock()
Zalecane:
var mu sync.Mutex
mu.Lock()
Jeśli używasz wskaźnika do struktury, mutex powinien być polem non-pointer struktury. Nawet jeśli struktura nie jest eksportowana, nie osadzaj bezpośrednio mutexu w strukturze.
Nie zalecane:
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]
}
// Pole Mutex, metody Lock i Unlock są częścią publicznego interfejsu SMap bez wyraźnego deklarowania.
Zalecane:
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]
}
// Mutex oraz jego metody są szczegółami implementacji SMap i nie są widoczne dla jego wywoływaczy.