Нулевые значения для sync.Mutex и sync.RWMutex являются эффективными. Поэтому указатели на мьютексы в основном не нужны.

Не рекомендуется:

mu := new(sync.Mutex)
mu.Lock()

Рекомендуется:

var mu sync.Mutex
mu.Lock()

Если вы используете указатель на структуру, то мьютекс должен быть полем структуры, а не указателем на него. Даже если структура не экспортируется, не встраивайте мьютекс напрямую в структуру.

Не рекомендуется:

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, методы Lock и Unlock являются частью экспортируемого API SMap без явного объявления.

Рекомендуется:

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]
}
// Мьютекс и его методы являются деталями реализации SMap и не видны вызывающим.