ゼロ値を持つ sync.Mutexsync.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 メソッドは、明示的な宣言なしに SMap のエクスポートAPIの一部です。

推奨されます:

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 の実装の詳細であり、呼び出し元には見えません。