[]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
это срез, а не массив. Различия между массивом и срезом тонкие, но важные.[]string
синтаксиса. Я добавлю цитату к своему ответу, чтобы было понятнее. :-)println
работать с многоточием? Здесь вы можете найти мои эксперименты. Если кому-то нужны отладочные функции печати, сходите и посмотрите мою игру.Оба создают массив строк, но разница в том, как он называется.
func f(args ...string) { } // Would be called like this: f("foo","bar","baz");
Это позволяет вам принимать переменное количество аргументов (все одного типа)
Прекрасным примером этого являются
fmt.Print
и друзья, которые могут принять столько лекарств, сколько захотите.источник
def fn(*args)
конструкции Python .Вот что вам нужно:
var args []string = []string{"A", "B", "C"} func Sample(args ...string) { for _, arg := range args { fmt.Println(arg) } } func main() { Sample(args...) }
Играть: http://play.golang.org/p/N1ciDUKfG1
источник
Это упрощает параметры вашей функции. Вот пример ( https://play.golang.org/p/euMuy6IvaM ): Метод SampleEllipsis принимает от нуля до многих параметров одного и того же типа, но в методе SampleArray обязательно должны быть объявлены аргументы .
package main import "fmt" func SampleEllipsis(args ...string) { fmt.Printf("Sample ellipsis : %+v\n",args) } func SampleArray(args []string) { fmt.Println("Sample array ") SampleEllipsis(args...) } func main() { // Method one SampleEllipsis([]string{"A", "B", "C"}...) // Method two SampleEllipsis("A", "B", "C") // Method three SampleEllipsis() // Simple array SampleArray([]string{"A", "B", "C"}) // Simple array SampleArray([]string{}) }
Возврат:
источник