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.