usuario una tipos que permite interfaz interactuar informatica grafica fisica con comunicacion computadora go

go - tipos - que es una interfaz grafica



Significado de... interfaz{}(punto punto punto interfaz) (2)

En cuanto al término interface{} , es la interfaz vacía. En otras palabras, la interfaz implementada por todas las variables en Go.

Esto es similar a java.lang.object o system.object en C #, pero en su lugar incluye todos los tipos de variables en el idioma. Por lo tanto, le permite pasar cualquier cosa al método.

A continuación hay una pieza de Go code sobre la que tengo dudas. Específicamente, ¿qué es 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 qué hace ...interface{} hacer?


Un tipo de parámetro con un prefijo de tres puntos (...) se llama parámetro variable . Eso significa que puede pasar cualquier número o argumentos en ese parámetro (al igual que con fmt.Printf() ). La función recibirá la lista de argumentos para el parámetro como un segmento del tipo declarado para el parámetro ( []interface{} en su caso). La especificación Go establece:

El parámetro final en una firma de función puede tener un tipo prefijado ... Una función con dicho parámetro se denomina variadic y puede invocarse con cero o más argumentos para ese parámetro.

Un parámetro:

a ...interface{}

Es, para la función equivalente a:

a []interface{}

La diferencia es cómo pasas los argumentos a tal función. Se realiza dando cada elemento de la división por separado, o como una sola porción, en cuyo caso tendrá que sufijo el valor de corte con los tres puntos. Los siguientes ejemplos darán como resultado la misma llamada:

fmt.Println("First", "Second", "Third")

Hará lo mismo que:

s := []interface{}{"First", "Second", "Third"} fmt.Println(s...)

Esto se explica bastante bien en la especificación Go también:

Dada la función y las llamadas

func Greeting(prefix string, who ...string) Greeting("nobody") Greeting("hello:", "Joe", "Anna", "Eileen")

dentro de Greeting , who tendrá el valor nil en la primera llamada, y []string{"Joe", "Anna", "Eileen"} en el segundo.

Si el argumento final es asignable a un tipo de sector []T , se puede pasar sin cambios como el valor para un parámetro ...T si el argumento es seguido por ... En este caso, no se crea una nueva porción.

Dado el corte s y llamada

s := []string{"James", "Jasmine"} Greeting("goodbye:", s...)

dentro de Greeting , who tendrá el mismo valor que s con la misma matriz subyacente.