dot dot dot … tres puntos en GO (Golang), Funciones Variádicas

Esta función supone reemplazar el fmt.Println para imprimir solo si la variable global Debug es true

func DPrintf(format string, str ...interface{}) (n int, err error) {
if Debug {
n, err = fmt.Printf(format, str...)
}
return n, err
}

 

En este caso, la función recibe  una cantidad variable de parámetros de cualquier tipo (interface{}). Un tipo de parámetro con prefijo con tres puntos (…) es llamado
parámetro variádico.

a ...interface{} es equivalente a []interface{}

 

La diferencia es cómo se pasan los argumentos a tal función. Se hace pasando cada elemento por separado, o en un solo array, en cuyo caso hay que poner el sufijo de los tres puntos.

De hecho, los argumentos pueden ser accedidos de esta forma:

for _, s := range str {
fmt.Println(s)
}

 

In
the above function DPrintf, arguments must be passed as a list of
elements separated by commas. There is a way to “unapck” the slice and
pass it as a valid argument using …

toBePrinted := []int{2, 4, 8, 16}
fmt.Println(Sum(toBePrinted...))

 

La notación …
especifica una longitud igual al número de elementos en el literal. Tal que se puede empezar a enumerar los valores sin tener cuidado de cuántos elemento tiene.

greeks := [...]string{"alpha", "beta", "gamma", "delta"}
// len(greeks) es 4

 

La función append tiene una firma así:

func append(where []T, what ...T)

 

por lo que puede ser llamada de estas dos maneras con uno o dos argumentos

append(slice, 'a') // one argument
append(slice, 'b', 'c') // two arguments

 

entonces, si se quiere haber un append de muchas cosas, … esta es una forma.

append(slice, []byte{'a', 'b', 'c'}...)

 

Check Also

Cómo usar mapas de folium en PyQt5 – Python

Folium tiene la capacidad de guardar los mapas resultados en un archivo html para ser …

Leave a Reply

Your email address will not be published. Required fields are marked *