تکنیکی مواد

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 کی تفصیلات اور اس کے کالرز کو دکھائی نہیں دیتے۔