يعتبر القيم الصفرية لـ 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]
}
// حقل القفل التزامن، وطرق 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 وليست مرئية للمتصلين به.