На языке Go
[]string это строковый массив
и мы также используем ...stringв качестве параметра.
В чем разница?
Определение функции:
func f(args ...string) {}
Могу ли я вызвать эту функцию, как показано ниже?
args := []string{"a", "b"}
f(args)
На языке Go
[]string это строковый массив
и мы также используем ...stringв качестве параметра.
В чем разница?
Определение функции:
func f(args ...string) {}
Могу ли я вызвать эту функцию, как показано ниже?
args := []string{"a", "b"}
f(args)
Ответы:
[]stringэто строковый массив
Технически это фрагмент, который ссылается на базовый массив
и мы также используем
...stringв качестве параметра.В чем разница?
Что касается конструкции, то ничего особенного. Тип данных, полученный в результате обоих синтаксисов, одинаков.
...Синтаксис параметра делает VARIADIC параметр. Он будет принимать ноль или более stringаргументов и ссылаться на них как на срез.
Что касается вызова f, вы можете передать фрагмент строк в вариативный параметр со следующим синтаксисом:
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
Этот синтаксис доступен либо для фрагмента, построенного с использованием буквального синтаксиса, либо для фрагмента, представляющего переменный параметр (поскольку на самом деле между ними нет никакой разницы) .
[]stringсинтаксиса. Я добавлю цитату к своему ответу, чтобы было понятнее. :-)
Оба создают массив строк, но разница в том, как он называется.
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...)
}
Это упрощает параметры вашей функции. Вот пример ( 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{})
}
Возврат:
Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array
Sample ellipsis : [A B C]
Sample array
Sample ellipsis : []
[]stringэто срез, а не массив. Различия между массивом и срезом тонкие, но важные.