Ответ
Используйте sync.Mutex или sync.RWMutex для защиты доступа к слайсу. Для частых операций чтения предпочтительнее RWMutex, так как он позволяет параллельные чтения.
Пример:
type SafeSlice struct {
mu sync.RWMutex
items []string
}
func (s *SafeSlice) Append(item string) {
s.mu.Lock()
defer s.mu.Unlock()
s.items = append(s.items, item)
}
func (s *SafeSlice) Get(index int) string {
s.mu.RLock()
defer s.mu.RUnlock()
return s.items[index]
}
Важные моменты:
- Все операции с слайсом должны быть защищены мьютексом
- Используйте
deferдля разблокировки - Для сложных структур рассмотрите
sync.Mapили каналы