Массивы

Последнее обновление: 20.12.2017

Массивы представляют последовательность элементов определенного типа. Массив определяется следующим способом:

var numbers [число_элементов]тип_элементов

Например, массив из пяти элементов типа int:

var numbers [5]int

При таком определении все элементы массива инициализируются значениями по умолчанию. Но также можно инициализировать элементы массива другими значениями:

var numbers [5]int = [5]int{1,2,3,4,5}

Значения передаются в фигурных скобках через запятую. При этом значений не может быть больше длины массива. В данном случае длина массива равна 5, поэтому нельзя в фигурных скобках определить больше пяти элементов. Но можно определить меньше элементов:

var numbers [5]int = [5]int{1,2}
fmt.Println(numbers)	// [1 2 0 0 0]

В этом случае элементы, для которых не указано значение, будут иметь значение по умолчанию.

Также можно применять сокращенное определение переменной массива:

numbers := [5]int{1,2,3,4,5}

Если в квадратных скобках вместо длины указано троеточие, то длина массива определяется, исходя из количества переданных ему элементов:

var numbers = [...]int{1,2,3,4,5}	// длина массива 5
numbers2 := [...]int{1,2,3}			// длина массива 3
fmt.Println(numbers)				// [1 2 3 4 5]
fmt.Println(numbers2)			// [1 2 3]

При этом длина массива является частью его типа. И, к примеру, следующие два массива представляют разные типы данных, хотя они и хранят дванные одного типа:

var numbers [3]int = [3]int{1, 2, 3}
var numbers2 [4]int = [4]int{1, 2, 3, 4}
numbers = numbers2	// ! Ошибка 

И в данном случае при присвоении мы получим ошибку, так как данные одного типа пытаемся передать переменной другого типа.

Индексы

Для обращения к элементам массива применяются индексы - номера элементов. При этом нумерация начинается с нуля, то есть первый элемент будет иметь индекс 0. Индекс указывается в квадратных скобках. По индексу можно получить значение элемента, либо изменить его:

package main
import "fmt"

func main() {
	var numbers [5]int = [5]int{1,2,3,4,5}
	fmt.Println(numbers[0])		// 1
	fmt.Println(numbers[4])		// 5
	numbers[0] = 87
	fmt.Println(numbers[0])		// 87
}

Индексы в массиве фактически выступают в качестве ключей, по которым можно обратиться к соответствующему значению. И в прицнипе мы можем явным образом указать, какому ключу какое значение будет соответствовать. При этому числовые ключи необязательно располагать в порядке возрастания:

colors := [3]string{2: "blue", 0: "red", 1: "green"}
fmt.Println(colors[2])		// blue
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850