[]string
это строковый массив
Технически это фрагмент, который ссылается на базовый массив
и мы также используем ...string
в качестве параметра.
В чем разница?
Что касается конструкции, то ничего особенного. Тип данных, полученный в результате обоих синтаксисов, одинаков.
...
Синтаксис параметра делает VARIADIC параметр. Он будет принимать ноль или более string
аргументов и ссылаться на них как на срез.
Что касается вызова f
, вы можете передать фрагмент строк в вариативный параметр со следующим синтаксисом:
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
Этот синтаксис доступен либо для фрагмента, построенного с использованием буквального синтаксиса, либо для фрагмента, представляющего переменный параметр (поскольку на самом деле между ними нет никакой разницы) .
http://play.golang.org/p/QWmzgIWpF8
[]string
это срез, а не массив. Различия между массивом и срезом тонкие, но важные.