Ответ
Используйте sync.Mutex или sync/atomic для потокобезопасного инкремента.
С Mutex:
type Counter struct {
mu sync.Mutex
count int
}
func (c *Counter) Increment() {
c.mu.Lock()
defer c.mu.Unlock()
c.count++
}
С atomic (быстрее для простых операций):
type Counter struct {
count int64
}
func (c *Counter) Increment() {
atomic.AddInt64(&c.count, 1)
}
Выбор:
Mutex— если нужны сложные операции (например, инкремент + проверка условия).atomic— для простых операций (инкремент, декремент).
Оба варианта гарантируют корректность при конкурентном доступе.