Как сделать слайс потокобезопасным

«Как сделать слайс потокобезопасным» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Используйте 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]
}

Важные моменты:

  1. Все операции с слайсом должны быть защищены мьютексом
  2. Используйте defer для разблокировки
  3. Для сложных структур рассмотрите sync.Map или каналы