Массивы и срезы
Массивы в Go - последовательность элементов одного типа фиксированной длины
Создание массива
[длина]Тип
[N]Тип{значение1, значение2, ..., значениеN}
[...]Тип { значение1, значение2, ..., значениеN } // ... - вычислить размер массива автоматически
Создание среза
make([]Тип, длина, емкость)
make([]Тип, длина)
[]Тип{}
[]Тип{значение1, значение2, ...}
На практике, всегда лучше создавать пустой срез через первый способ с непустой емкостью, примерно равной количеству ожидаемых элементов:
make([]Тип, 0, 10)
Особенности
Массивы передаются по значению (можно, конечно, сделать указатель на массив), а срезы всегда по ссылке. Из массива всегда извлекается срез через операцию [n:m]. Массивы имеют фиксированный размер, а срезы - переменный.
Все функции в стандартной библиотеке Go, образующие общедоступный API, используют срезы, а не массивы.
Операции над срезами
Добавление элементов и срезов
s = append(s, "a", "b", "c") // Добавить элементы a, b, c в срез s
s = append(s, t...) // добавить все элементы среза t в срез s
s = append(s, t[2:5]...) // добавить часть элементов из среза t в срез s
Contains
Встроенной функции для массивов нет
func Contains(target string, list []string) bool {
for _, elem := range list {
if elem == target {
return true
}
}
return false
}
Last updated