Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Переменное количество параметров
Количество параметров в функции может быть произвольным. Например, мы очень часто пользовались функций Println()
, которая имеет следующий формат:
fmt.Println(a ...interface{}) (n int, err error)
Тип interface{}
означает, что мы можем передавать данные любых типов, а троеточие говорит, что данных может быть сколько угодно:
fmt.Println(10) // 10
fmt.Println(20, 30) // 20 30
fmt.Println(40, 50, 60) // 40 50 60
Если ожидается произвольное количество значений, то их может не быть и вовсе:
fmt.Println()
Итак, значения, переданные при вызове в большем количестве, чем указано параметров при объявлении, можно поместить в слайс. Для этого перед типом параметра указываются три точки (оператор REST
). Такой параметр должен быть расположен после всех остальных параметров. В качестве примера напишем функцию суммирования произвольного количества целых чисел (листинг 10.11).
Листинг 10.11. Переменное количество параметров
package main
import "fmt"
func main() {
fmt.Println(Sum(10, 20)) // 30
fmt.Println(Sum(5, 6, 7, 20)) // 38
}
func Sum(x int, y int, arr ...int) int {
result := x + y
for _, value := range arr {
result += value
}
return result
}
Первые два значения будут присвоены переменным x
и y
, а все остальные будут добавлены в слайс arr
. Конечно же в этом примере первые два параметра мы можем убрать полностью и оставить только один параметр с оператором REST
. Просто хотелось показать, что могут быть и обычные параметры, а параметр с оператором REST
должен быть расположен последним.
Если указан оператор REST
, а данные хранятся в слайсе, то можно выполнить распаковку слайса, указав после переменной или слайса троеточие (оператор SPREAD
):
arr := []int{5, 6, 7, 20}
fmt.Println(Sum(1, 2, arr...)) // 41
fmt.Println(Sum(1, 2, []int{5, 6, 7, 20}...)) // 41
Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов