Перейти к основному содержимому

Длина массива

Для получения длины массива Go предоставляет встроенную функцию len(), которая возвращает количество элементов массива:

package main
import "fmt"

func main() {

numbers := [...] int {3, 4, 5, 6}

fmt.Println("Numbers length:", len(numbers)) // Numbers length: 4
}

Для многомерных массивов функция len() возвращает размер только первой размерности массива. Например:

package main
import "fmt"

func main() {

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

fmt.Println("Numbers values:", numbers) // Numbers values: [[1 0] [7 0] [0 0]]
fmt.Println("Numbers length:", len(numbers)) // Numbers length: 3
}

Здесь двухмерный массив имеет в совокупности 3 * 2 = 6 элементов, хотя инициализированы только два из них. Однако реальная длина по функции len() равна 3, так как первая размерность (количество строк) равна 3.

Сравнение массивов

Два массива называются равными, если они оба имеют одинаковый тип и размер, имеют одинаковые элементы, и все элементы находятся в одинаковом порядке в обоих массивах. Для сравнения массивов применяется стандартный оператор сравнения ==. Он возвращает true, если оба массива равны, в противном случае false. Сначала он проверяет тип данных обоих массивов, а затем сопоставляет значения по индексу:

package main
import "fmt"

func main() {

nums1 := [4] int {3, 4, 5, 6}
nums2 := [4] int {3, 4, 5}

fmt.Println("nums1 == nums2:", nums1==nums2) // false

nums3 := [3][2] int { {2}, {5}, }
nums4 := [3][2] int { {2, 1}, {5}, }
fmt.Println("nums3 == nums4:", nums3==nums4) // false

nums5 := [4] int{3, 4, 5, 0}
fmt.Println("nums2 == nums5:", nums2==nums5) // true
}

Копирование массива

Копирование массива — это просто присвоение одного массива другому. Поскольку в Go массив ведет себя как значение, а не как ссылка, то изменение любого значения одного массива не оказывает никакого влияния на другой.

package main
import "fmt"

func main() {

nums1 := [4] int {3, 4, 5, 6}
nums2 := nums1 // копирование массива nums1 в nums2

nums2[1] = 11 // меняем значение в nums2, nums1 не меняется

fmt.Println("nums1:", nums1) // nums1: [3 4 5 6]

fmt.Println("nums2:", nums2) // nums2: [3 11 5 6]
}