Ответ
map и slice — это две фундаментальные встроенные структуры данных в Go, но они служат разным целям.
Слайс (slice) — это обертка над массивом, представляющая собой динамическую, упорядоченную последовательность элементов одного типа.
Мапа (map) — это неупорядоченная коллекция пар ключ-значение, где все ключи имеют один тип, а все значения — другой.
| Характеристика | Слайс (slice) | Мапа (map) |
|---|---|---|
| Структура | Упорядоченная последовательность | Неупорядоченная коллекция ключ-значение |
| Доступ | По целочисленному индексу (начиная с 0) | По уникальному ключу (любого сравнимого типа) |
| Нулевое значение | nil. К nil-слайсу можно добавлять элементы (append) | nil. Запись в nil-мапу вызовет панику. Чтение вернет нулевое значение для типа значения. |
| Производительность | Доступ по индексу: O(1). Добавление: O(1) в среднем, но может быть O(n) при реаллокации. | Доступ, вставка, удаление: O(1) в среднем (амортизированная сложность). |
| Пример использования | Список пользователей, буфер данных, любая упорядоченная коллекция. | Кэш, словарь, хранение конфигурации, поиск по идентификатору. |
Пример в коде:
// Слайс: упорядоченная коллекция, доступ по индексу
users := []string{"Alice", "Bob", "Charlie"}
fmt.Println(users[1]) // Выведет "Bob"
// Мапа: неупорядоченная коллекция, доступ по ключу
userAges := map[string]int{
"Alice": 25,
"Bob": 30,
}
fmt.Println(userAges["Alice"]) // Выведет 25