Vous trouverez ci-dessous un morceau de code Go sur lequel j'ai une question. Plus précisément, qu'est-ce que a
cette fonction?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
Quelqu'un pourrait-il me dire quels sont les trois points ici? Et que fait ...interface{}
-on?
Réponses:
Un type de paramètre précédé de trois points (...) est appelé paramètre variadique . Cela signifie que vous pouvez passer n'importe quel nombre ou arguments dans ce paramètre (comme avec
fmt.Printf()
). La fonction recevra la liste des arguments du paramètre sous la forme d'une tranche du type déclaré pour le paramètre ([]interface{}
dans votre cas). La spécification Go stipule:Un paramètre:
Est, pour la fonction équivalente à:
La différence réside dans la façon dont vous passez les arguments à une telle fonction. Cela se fait soit en donnant chaque élément de la tranche séparément, soit en une seule tranche, auquel cas vous devrez suffixer la valeur de la tranche avec les trois points. Les exemples suivants aboutiront au même appel:
Fera la même chose que:
Ceci est également expliqué assez bien dans la spécification Go :
la source
En ce qui concerne le
interface{}
terme, c'est l'interface vide. En d'autres termes, l'interface implémentée par toutes les variables dans Go.C'est en quelque sorte analogue à
java.lang.Object
ouSystem.Object
en C #, mais inclut à la place chaque type de variable dans le langage. Cela vous permet donc de transmettre n'importe quoi à la méthode.la source