Параметр-массив в Go
Давайте теперь будем передавать в функцию массив. Длина входит в тип
параметра: в скобках типа пишут число элементов, например
[3]int. Функция получает отдельную копию, и правки внутри не
меняют переменную снаружи.
Попробуем изменить первый элемент внутри функции func:
package main
import "fmt"
func func(nums [3]int) {
nums[0] = 99
}
func main() {
data := [3]int{1, 2, 3}
func(data)
fmt.Println(data[0]) // выведет 1
}
На экране по-прежнему 1. Запись внутри func
затронула только копию. Переменная data в main не
изменилась.
Прочитать элемент копии и вернуть его можно функцией func, не
меняя оригинал:
package main
import "fmt"
func func(nums [3]int) int {
return nums[2]
}
func main() {
data := [3]int{4, 5, 6}
fmt.Println(func(data)) // выведет 6
}
Массив и срез здесь разные типы. В параметр [3]int нельзя
передать []int и нельзя передать массив другой длины.
Дан следующий массив:
vals := [2]int{7, 8}
Напишите функцию func с параметром [2]int, которая
возвращает элемент с индексом 1. Выведите результат для
vals.
Дан следующий массив:
data := [3]int{1, 2, 3}
Напишите функцию func с параметром [3]int, которая
увеличивает элемент с индексом 0 на 1 только внутри.
Вызовите с data и выведите data[0] после вызова.
Скажите, почему параметр [3]int и [2]int считаются
разными типами.