A continuación se muestra un fragmento del código Go sobre el que tengo preguntas. Específicamente, ¿qué hay a
en esta función?
func DPrintf(format string, a ...interface{}) (n int, err error) {
if Debug > 0 {
n, err = fmt.Printf(format, a...)
}
return
}
¿Alguien podría decirme qué son los tres puntos aquí? Y lo que ...interface{}
hacer?
Respuestas:
Un tipo de parámetro con el prefijo de tres puntos (...) se denomina parámetro variádico . Eso significa que puede pasar cualquier número o argumentos a ese parámetro (al igual que con
fmt.Printf()
). La función recibirá la lista de argumentos para el parámetro como una porción del tipo declarado para el parámetro ([]interface{}
en su caso). La especificación Go establece:Un parámetro:
Es, para la función equivalente a:
La diferencia es cómo se pasan los argumentos a dicha función. Se hace dando cada elemento de la rebanada por separado, o como una sola rebanada, en cuyo caso tendrá que agregar el sufijo al valor de la rebanada con los tres puntos. Los siguientes ejemplos resultarán en la misma llamada:
Hará lo mismo que:
Esto se explica bastante bien en la especificación Go :
fuente
En cuanto al
interface{}
término, es la interfaz vacía. En otras palabras, la interfaz implementada por todas las variables en Go.Esto es algo análogo a
java.lang.Object
oSystem.Object
en C #, pero en cambio incluye todos los tipos de variable en el lenguaje. Entonces te permite pasar cualquier cosa al método.fuente