в чем разница между []string и ...string в golang?


на языке Go

[]string - это массив строк

и ...string в качестве параметра

какая разница?

функции определение:

func f(args ...string) {}

и я могу вызвать эту функцию, как показано ниже?

args := []string{"a", "b"}

f(args)
4 61

4 ответа:

[]string - это массив строк

технически это срез, который ссылается на базовый массив

и ...string в качестве параметра

какая разница?

что касается структуры, ничего особенного. Тип данных, полученный из обоих синтаксисов, одинаков.

The ... синтаксис параметра делает переменный параметр. Он будет принимать ноль или больше string Аргументы, и ссылайтесь на них как на срез.

в отношении вызова f, вы можете передать фрагмент строк в параметр variadic со следующим синтаксисом:

func f(args ...string) {
    fmt.Println(len(args))
}


args := []string{"a", "b"}

f(args...)

этот синтаксис доступен либо для среза, построенного с использованием литерального синтаксиса, либо для среза, представляющего переменный параметр (так как на самом деле нет никакой разницы между ними).

http://play.golang.org/p/QWmzgIWpF8

Как создать массив строк, но разница в том, как это называется.

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...)
}

Play:http://play.golang.org/p/N1ciDUKfG1

это упрощает параметры функции. Вот пример(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 : []