В чем разница между [] string и... string в golang?
На языке Go,
[]string
представляет собой строковый массив
и мы также используем ...string
в качестве параметра.
В чем разница?
Определение функции:
func f(args ...string) {}
Могу ли я вызвать эту функцию, как показано ниже?
args := []string{"a", "b"}
f(args)
Ответы
Ответ 1
[]string
представляет собой строковый массив
Технически это фрагмент, который ссылается на базовый массив
и мы также используем ...string
в качестве параметра.
В чем разница?
Что касается структуры, ничего особенного. Тип данных, полученный в обоих синтаксисах, одинаков.
Синтаксис параметра ...
создает переменный параметр. Он будет принимать ноль или более string
аргументов и ссылаться на них как на фрагмент.
Что касается вызова f
, вы можете передать фрагмент строки в параметр переменной со следующим синтаксисом:
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
Этот синтаксис доступен либо для среза, построенного с использованием литерального синтаксиса, либо для среза, представляющего параметр с переменными параметрами (поскольку между ними действительно нет различий).
http://play.golang.org/p/QWmzgIWpF8
Ответ 2
Оба создают массив строк, но разница в том, как он называется.
func f(args ...string) {
}
// Would be called like this:
f("foo","bar","baz");
Это позволяет принимать переменное количество аргументов (все одинакового типа)
Отличным примером этого является fmt.Print
и друзья, которые могут принимать как можно меньше или меньше, чем вы хотите.
Ответ 3
Вот что вы хотите:
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
Ответ 4
Он упрощает ваши параметры функции. Вот пример (https://play.golang.org/p/euMuy6IvaM):
Метод SampleEllipsis принимает от нуля ко многим параметрам одного и того же типа, но в методе SampleArray обязательно объявляется args.
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{})
}
Возвращает:
Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array
Sample ellipsis : [A B C]
Sample array
Sample ellipsis : []