‘sync.Mutex’ ve ‘sync.RWMutex’ için sıfır değerler etkilidir. Bu nedenle, mutexlere işaretçilere gerek yoktur.
Tavsiye edilmez:
mu := new(sync.Mutex)
mu.Lock()
Tavsiye edilen:
var mu sync.Mutex
mu.Lock()
Eğer bir yapıya işaretçi kullanıyorsanız, mutex yapıdaki işaretçi olmayan bir alan olmalıdır. Yapı dışa aktarılmamış olsa bile, mutex’ü doğrudan yapıya gömülmemelidir.
Tavsiye edilmez:
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]
}
// Mutex alanı, Lock ve Unlock yöntemleri, SMap dışa aktarılan API'nin açık bir şekilde bildirilmeksizin bir parçasıdır.
Tavsiye edilen:
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 ve yöntemleri, SMap'ın uygulama ayrıntılarıdır ve çağrılarına görünmez.