W języku Go
[]string
jest tablicą łańcuchową
i używamy również ...string
jako parametru.
Jaka jest różnica?
Definicja funkcji:
func f(args ...string) {}
Czy mogę nazwać tę funkcję jak poniżej?
args := []string{"a", "b"}
f(args)
[]string
jest tablicą łańcuchową
Z technicznego punktu widzenia jest to wycinek, który odwołuje się do podstawowej tablicy
i używamy również
...string
jako parametru.Jaka jest różnica?
Jeśli chodzi o strukturę, to naprawdę nic. Typ danych wynikający z obu składni jest taki sam.
...
Składnia parametr sprawia, że o zmiennej liczbie argumentów parametru. Przyjmuje zero lub więcej string
argumentów i odwołuje się do nich jako do wycinka.
Jeśli chodzi o wywołanie f
, możesz przekazać kawałek ciągów do parametru variadic z następującą składnią:
func f(args ...string) {
fmt.Println(len(args))
}
args := []string{"a", "b"}
f(args...)
Ta składnia jest dostępna albo dla wycinka zbudowanego przy użyciu składni literału, albo dla wycinka reprezentującego parametr wariadyczny (ponieważ tak naprawdę nie ma między nimi różnicy) .
[]string
jest wycinkiem, a nie tablicą. Różnice między tablicą a plasterkiem są subtelne, ale ważne.[]string
składni. Dodam więcej cytatu do mojej odpowiedzi, aby była jaśniejsza. :-)println
działały z wielokropkiem? Tutaj możesz znaleźć moje eksperymenty. Jeśli ktoś życzy sobie jakichś funkcji debugowania drukowania, zobacz moją zabawę.Obie tworzą tablicę ciągów, ale różnica polega na tym, jak się ją nazywa.
func f(args ...string) { } // Would be called like this: f("foo","bar","baz");
Pozwala to na akceptację zmiennej liczby argumentów (wszystkie tego samego typu)
Doskonałym tego przykładem są
fmt.Print
i przyjaciele, którzy mogą zaakceptować tak mało lub tyle aresztowań, ile chcesz.źródło
def fn(*args)
konstrukcją Pythona .Oto, czego chcesz:
var args []string = []string{"A", "B", "C"} func Sample(args ...string) { for _, arg := range args { fmt.Println(arg) } } func main() { Sample(args...) }
Odtwórz: http://play.golang.org/p/N1ciDUKfG1
źródło
Upraszcza parametry funkcji. Oto przykład ( https://play.golang.org/p/euMuy6IvaM ): Metoda SampleEllipsis akceptuje od zera do wielu parametrów tego samego typu, ale w metodzie SampleArray wymagane jest zadeklarowanie argumentów .
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{}) }
Zwroty :
źródło