‘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.