ค่าศูนย์สำหรับ sync.Mutex และ sync.RWMutex เป็นที่มีผล ดังนั้น ตัวชี้ไปที่มิวเท็กซ์เป็นสิ่งที่ไม่จำเป็น
ไม่แนะนำ:
mu := new(sync.Mutex)
mu.Lock()
แนะนำ:
var mu sync.Mutex
mu.Lock()
หากคุณใช้ตัวชี้ไปยังโครงสร้าง มิวเท็กซ์ควรเป็นฟิลด์ non-pointer ของโครงสร้าง แม้กระทั่งโครงสร้างจะไม่ได้ถูกส่งออก อย่าฝังมิวเท็กซ์โดยตรงลงในโครงสร้าง
ไม่แนะนำ:
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 และไม่สามารถมองเห็นได้โดยผู้เรียกใช้งานของมัน