Массивы и срезы

Массивы в 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