Что означает "...", когда рядом с параметром в объявлении функции go?

Я просматривал код, написанный на языке Google Go, и я наткнулся на это:

func Statusln(a ...interface{})
func Statusf(format string, a ...interface{})

Я не понимаю, что означает .... Кто-нибудь знает?

Ответы

Ответ 1

Это означает, что вы можете вызвать Statusln с переменным числом аргументов . Например, вызов этой функции с помощью:

Statusln("hello", "world", 42)

Назначит параметру a следующее значение:

a := []interface{}{"hello", "world", 42}

Итак, вы можете перебирать этот срез a и обрабатывать все параметры, независимо от того, сколько их есть. Хорошим и популярным вариантом использования вариационных аргументов является, например, fmt.Printf(), который принимает строку формата и переменное количество аргументов, которые будут отформатированы в соответствии со строкой формата.

Ответ 2

Это аргумент переменной длины

func Printf(format string, v ...interface{}) (n int, err error) {

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

fmt.Printf("just i: %v", i)
fmt.Printf("i: %v and j: %v",i,j)

Как вы можете видеть здесь, с переменными аргументами, одна подпись подходит для всех длин.

Кроме того, вы можете указать некоторый точный тип, например ...int.