type tipos slices golang example else define declaracion array variables go

variables - tipos - ¿Qué es "_,"(coma de subrayado) en una declaración Go?



golang variables type (7)

Y parece que no puedo entender este tipo de declaración de variable:

_, prs := m["example"]

¿Qué está haciendo exactamente " _, " y por qué han declarado una variable como esta en lugar de

prs := m["example"]

(Lo encontré como parte de Go by Example: Maps )


El identificador en blanco se puede usar siempre que la sintaxis requiera un nombre de variable, pero la lógica del programa no, por ejemplo, para descartar un índice de bucle no deseado cuando solo necesitamos el valor del elemento.

Extracto de:

El lenguaje de programación Go (Addison-Wesley Professional Computing Series)

Brian W. Kernighan

Este material puede estar protegido por derechos de autor.


Una variable no utilizada no está permitida en Golang

Si vinieras de otros lenguajes de programación, podría ser un poco difícil acostumbrarte a esto. Pero esto da como resultado un código más limpio. Entonces, al usar un _ , estamos diciendo que sabemos que hay una variable allí, pero no queremos usarla, y le decimos al compilador que no me queja. :)


Básicamente, _, conocido como el identificador en blanco. En GO no podemos tener variables que no se estén utilizando.

Como una instancia cuando itera a través de una matriz si está utilizando value: = rango , no desea un valor i para iterar. Pero si omite el valor i, devolverá un error. Pero si declaras i y no lo usaste, también devolverá un error.

Por lo tanto, ese es el lugar donde tenemos que usar _,

También se usa cuando no desea el valor de retorno de una función en el futuro.


El compilador Go no te permitirá crear variables que nunca uses.

for i, value := range x { total += value }

El código anterior devolverá un mensaje de error "declare y no se usa".

Como no usamos i dentro de nuestro bucle, necesitamos cambiarlo a esto:

for _, value := range x { total += value }


Evita tener que declarar todas las variables para los valores devueltos.
Se llama el identificador en blanco .

Como en:

_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate

(el otro caso de uso '' _ '' es para importación )

Dado que descarta el valor de retorno, es útil cuando desea verificar solo uno de los valores devueltos, como en " ¿Cómo probar la existencia de clave en un mapa? ", Que se muestra en " Efectivo Ir, mapa ":

_, present := timeZone[tz]

Para comprobar la presencia en el mapa sin preocuparse por el valor real, puede usar el identificador en blanco, un guión bajo simple ( _ ).
El identificador en blanco se puede asignar o declarar con cualquier valor de cualquier tipo, con el valor descartado de forma inofensiva.
Para probar la presencia en un mapa, use el identificador en blanco en lugar de la variable habitual para el valor.

Como Jsor agrega en los comentarios :

"estándar generalmente aceptado" es llamar a las variables de prueba de membresía "ok" (lo mismo para verificar si la lectura de un canal fue válida o no)

Eso te permite combinarlo con test:

if _, err := os.Stat(path); os.IsNotExist(err) { fmt.Printf("%s does not exist/n", path) }

Lo encontrarás también en bucle:

Si solo necesita el segundo elemento en el rango (el valor), use el identificador en blanco, un guión bajo, para descartar el primero:

sum := 0 for _, value := range array { sum += value }


Se llama el identificador en blanco y ayuda en los casos en que desea descartar el valor que se va a devolver y no hacer referencia a él.

Algunos lugares donde lo usamos:

  • Una función devuelve un valor y no tiene intención de usarlo en el futuro
  • Desea iterar y necesita un valor i que no usará

_ es el identificador en blanco. Es decir, el valor que debe asignarse se descarta.

Aquí se descarta el valor de la clave de example . La segunda línea de código descartaría la presencia booleana y almacenaría el valor en prs .
Entonces, para verificar solo la presencia en el mapa, puede descartar el valor. Esto se puede usar para usar un mapa como un conjunto.