Map — O(1) амортизированный поиск через хеш-таблицу. Слайс — O(n) линейный перебор.
// Map: O(1) — вычислил хеш, нашёл бакет, достал значение
val, ok := m[key]
// Слайс: O(n) — перебираем всё
for _, v := range slice {
if v == target { found = true; break }
}
// Отсортированный слайс + binary search: O(log n)
i, found := slices.BinarySearch(sorted, target)
Когда использовать что:
- Частый поиск по ключу → map
- Порядок важен + редкий поиск → слайс
- Маленькая коллекция (<10 элементов) → слайс (кеш-локальность)
- Проверка наличия → map[T]struct{} (set)