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]
}
// म्यूटेक्स फ़ील्ड, लॉक, और अनलॉक मेथड्स 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 के अन्तर्निहित विवरण हैं और इसके कॉलर्स को दिखाई नहीं देते हैं।