Ответ
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