Go มีสองแนวทางสำหรับความปลอดภัยด้าน concurrency ได้แก่ channel ("share memory by communicating") และ package sync (mutex/lock เพื่อปกป้อง shared memory โดยตรง) แม้ว่า Go จะมีปรัชญาที่เน้น channel เป็นหลัก แต่ sync primitive มักเป็นทางเลือกที่ง่ายกว่าและมีประสิทธิภาพกว่าสำหรับการปกป้อง shared state
sync.Mutex — ปกป้อง shared state ด้วย lock
Counter {
mu sync.Mutex
count
}
Increment() {
c.mu.Lock()
c.mu.Unlock()
c.count++
}
