Unten ist ein Teil des Go-Codes, zu dem ich Fragen habe. Was ist a
in dieser Funktion konkret ?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
Kann mir jemand sagen, was die drei Punkte hier sind? Und was macht ...interface{}
das?
Antworten:
Ein Parametertyp mit drei Punkten (...) wird als variadischer Parameter bezeichnet . Das heißt, Sie können eine beliebige Anzahl oder Argumente an diesen Parameter übergeben (genau wie bei
fmt.Printf()
). Die Funktion erhält die Liste der Argumente für den Parameter als Slice des für den Parameter deklarierten Typs ([]interface{}
in Ihrem Fall). In der Go-Spezifikation heißt es:Ein Parameter:
Ist für die Funktion äquivalent zu:
Der Unterschied besteht darin, wie Sie die Argumente an eine solche Funktion übergeben. Dies erfolgt entweder durch Angabe jedes Elements des Slice separat oder als einzelnes Slice. In diesem Fall müssen Sie den Slice-Wert mit den drei Punkten versehen. Die folgenden Beispiele führen zum gleichen Aufruf:
Wird das gleiche tun wie:
Dies wird auch in der Go-Spezifikation recht gut erklärt :
quelle
Soweit der
interface{}
Begriff, ist es die leere Schnittstelle. Mit anderen Worten, die Schnittstelle, die von allen Variablen in Go implementiert wird.Dies ist analog zu
java.lang.Object
oderSystem.Object
in C #, schließt jedoch jeden Variablentyp in der Sprache ein. Sie können also alles an die Methode übergeben.quelle