Die Bedeutung von ...interface{} in Go verstehen
In Go ist ein Parametertyp mit drei Punkten als Präfix (...) ) ist als variadischer Parameter bekannt. Dies bedeutet, dass eine Funktion eine beliebige Anzahl von Argumenten für diesen bestimmten Parameter akzeptieren kann.
Betrachten Sie die folgende Funktion:
func DPrintf(format string, a ...interface{}) (n int, err error) { if Debug > 0 { n, err = fmt.Printf(format, a...) } return }
Der Parameter a ist vom Typ ...interface{} und gibt an dass es null oder mehr Argumente jeglichen Typs akzeptieren kann. Diese Argumente werden dann von der Funktion als Slice des für den Parameter deklarierten Typs empfangen, in diesem Fall []interface{}.
Die Go-Spezifikation liefert die folgende Erklärung:
„Der letzte Parameter in einer Funktionssignatur kann einen Typ haben, dem das Präfix … vorangestellt ist. Eine Funktion mit einem solchen Parameter heißt variadic und kann dafür mit null oder mehr Argumenten aufgerufen werden.“ Parameter."
Daher ist ein Parameter vom Typ ...interface{} äquivalent zu einem Parameter vom Typ []interface{} innerhalb der Funktion. Der Unterschied liegt darin, wie Argumente an die Funktion übergeben werden. Sie können entweder einzeln oder als einzelnes Slice übergeben werden. In diesem Fall müssen dem Slice-Wert die drei Punkte (...) angehängt werden.
Zum Beispiel die folgenden zwei Aufrufe der Funktion fmt.Println führt zum gleichen Ergebnis:
fmt.Println("First", "Second", "Third")
s := []interface{}{"First", "Second", "Third"} fmt.Println(s...)
In beiden Fällen wird das Slice s mit den drei Punkten an die Println-Funktion übergeben, was angibt, dass es als a behandelt werden sollte Variadisches Argument.
Dieser Mechanismus bietet Flexibilität, indem er Funktionen ermöglicht, eine variable Anzahl von Argumenten zu akzeptieren, wodurch sie vielseitiger und wiederverwendbar werden.
Das obige ist der detaillierte Inhalt vonWas bedeutet „...interface{}' in Go Variadic-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!