2012-04-12 3 views

ответ

25

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

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

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

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

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

+0

+1, Спасибо за ссылку на документацию, – Ali

+0

FYI. Если у вас уже есть несколько аргументов в срезе, примените их к вариационной функции, используя 'func (slice ...)' like 'Statusln (a ...)' в приведенном выше примере. – thuzhf

5

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

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

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

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

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

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

+1

что это значит? что количество аргументов не указано? – Chaos

+0

@shailesh Я добавил пример –

+0

@ om-nom-nom Спасибо, теперь довольно ясно – Chaos

Смежные вопросы