Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goPmFnSL 251 of 350 menu
◀ ▶

Параметр-срез в Go

Давайте теперь будем передавать в функцию срез и обходить его внутри. В параметре указывают тип с квадратными скобками без числа, например []int. В теле доступны индекс, len и цикл по элементам.

Изменим первый элемент среза внутри функции func:

package main import "fmt" func func(nums []int, v int) { nums[0] = v } func main() { data := []int{1, 2, 3} func(data, 9) fmt.Println(data) // выведет [9 2 3] }

После вызова в data первый элемент равен 9. Параметр-срез копирует заголовок, но делит массив элементов, поэтому запись по индексу видна снаружи.

Сумму элементов удобно считать в отдельной функции sum с тем же типом параметра:

package main import "fmt" func sum(nums []int) int { total := 0 for _, n := range nums { total += n } return total } func main() { vals := []int{2, 3, 5} fmt.Println(sum(vals)) // выведет 10 }

Срез в параметр передают переменной, а не списком в фигурных скобках языка с другими правилами. Длина в тип не входит: одна и та же функция примет срез из двух элементов и срез из десяти.

Дан следующий срез:

nums := []int{4, 1, 7}

Напишите функцию func с параметром-срезом, которая возвращает элемент с индексом 0. Выведите результат для nums.

Дан следующий срез:

data := []int{2, 2, 2}

Напишите функцию func, которая прибавляет 10 к элементу с индексом 0. Вызовите с data и выведите срез после вызова.

Скажите, изменится ли исходный срез снаружи, если внутри функции записать новое значение по индексу 0.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить