в чем разница между []string и ...string в golang?
на языке Go
[]string
- это массив строк
и ...string
в качестве параметра
какая разница?
функции определение:
func f(args ...string) {}
и я могу вызвать эту функцию, как показано ниже?
args := []string{"a", "b"}
f(args)
4 ответа:
[]string
- это массив строктехнически это срез, который ссылается на базовый массив
и
...string
в качестве параметракакая разница?
что касается структуры, ничего особенного. Тип данных, полученный из обоих синтаксисов, одинаков.
The
...
синтаксис параметра делает переменный параметр. Он будет принимать ноль или большеstring
Аргументы, и ссылайтесь на них как на срез.в отношении вызова
f
, вы можете передать фрагмент строк в параметр variadic со следующим синтаксисом:func f(args ...string) { fmt.Println(len(args)) } args := []string{"a", "b"} f(args...)
этот синтаксис доступен либо для среза, построенного с использованием литерального синтаксиса, либо для среза, представляющего переменный параметр (так как на самом деле нет никакой разницы между ними).
Как создать массив строк, но разница в том, как это называется.
func f(args ...string) { } // Would be called like this: f("foo","bar","baz");
Это позволяет принимать переменное число аргументов (все одного типа)
отличный пример этого
fmt.Print
и друзья, которые могут принять так мало или столько рукколы, как вы хотите.
вот что вы хотите:
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 это обязательно 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 : []