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)
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)
Odpowiedzi:
[]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
składni. Dodam więcej cytatu do mojej odpowiedzi, aby była jaśniejsza. :-)
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.
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
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 :
Sample ellipsis : [A B C]
Sample ellipsis : [A B C]
Sample ellipsis : []
Sample array
Sample ellipsis : [A B C]
Sample array
Sample ellipsis : []
[]string
jest wycinkiem, a nie tablicą. Różnice między tablicą a plasterkiem są subtelne, ale ważne.