Nilai-nol untuk sync.Mutex
dan sync.RWMutex
efektif. Jadi, pointer ke mutex pada dasarnya tidak diperlukan.
Tidak disarankan:
mu := new(sync.Mutex)
mu.Lock()
Disarankan:
var mu sync.Mutex
mu.Lock()
Jika Anda menggunakan pointer ke sebuah struktur, mutex harus menjadi bagian dari field non-pointer dari struktur tersebut. Bahkan jika struktur tersebut tidak diekspor, jangan menyematkan mutex langsung ke dalam struktur.
Tidak disarankan:
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]
}
// Field Mutex, metode Lock, dan Unlock merupakan bagian dari API yang diekspor dari SMap tanpa deklarasi eksplisit.
Disarankan:
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 dan metodenya merupakan detail implementasi dari SMap dan tidak terlihat oleh pemanggilnya.