titulos tipos texto subrayado resaltar negrita fondo enfatizado con color go

go - tipos - texto enfatizado html



Significado del subrayado(identificador en blanco) en Go (5)

"Solo hay dos cosas difíciles en Ciencias de la computación: la invalidación de caché y nombrar cosas". Tim Bray citando a Phil Karlton

Se trata de no tener que nombrar cosas.

En Go, cuando no desea utilizar foo o foo como nombre de variable de ejemplo, puede usar _ . ¡Eso es! Podrían haber escrito var a I = T{} , el resultado hubiera sido el mismo (excepto que las variables no utilizadas son un error en Go).

Para otros usos del identificador en blanco, lea Efectivo Ir .

Cuando estaba leyendo los documentos de Go encontré esto:

Puede pedirle al compilador que verifique que el tipo T implementa la interfaz I al intentar una asignación:

type T struct{} var _ I = T{} // Verify that T implements I.

No entiendo para qué se usa el _ y lo he visto en otras tareas, pero no puedo entender lo que significa. Al profundizar, encontré que se llama "identificador en blanco" pero no entiendo el caso de uso que ponen:

_ = x // evaluate x but ignore it

Los modismos de Go aún se sienten un poco extraños para mí, así que estoy tratando de entender por qué querría hacer algo como esto.


El compilador Go prácticamente no permite las variables que se declaran pero no se utilizan . Al igual que,

for i, myvalue := range myvar { total += mvalue }

El código dado mostrará un error algo en este contexto -> "declarado pero no usado".
Por lo tanto, lo resolvemos utilizando el siguiente fragmento de código:

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


En cuanto a la parte de importación , se trata de importar un paquete únicamente por sus efectos secundarios.
Por favor, consulte en este link .


En palabras simples _ es un valor ignorado. Go no permite variables locales no utilizadas y emite un error de compilación si intentas hacerlo. Así que engañas al compilador diciendo "ignora este valor" colocando un _

Por ejemplo:

// Here range of os.Args returns index,value for index,arg in range os.Args[1:] { fmt.Println(arg) }

Aquí Go lanza un error de compilación porque no está utilizando el índice (variable local no utilizada) en el bucle. Ahora deberías hacer índice a _ para decir compilador para ignorarlo.

for _,arg in range os.Args[1:] { fmt.Println(arg) }


Esto es común en idiomas que permiten múltiples valores de retorno. Hay situaciones en las que en realidad no te importa uno de los valores de retorno.

Por ejemplo, en Go, es común devolver un error. Si por alguna razón no le importa ese error, puede optar por ignorarlo:

value, _ := methodThatReturnsValueAndError()

Sin embargo, si lo asigna y no lo usa, hay un error del compilador:

value, err := methodThatReturnsValueAndError() // if you don''t use "err" .. its an error


_ es un identificador especial al que se le puede asignar cualquier cosa pero de la que nunca se puede leer. En el primer ejemplo que dio:

var _ I = T{}

No hay forma de acceder a esta variable, por lo que se optimizará fuera del programa resultante. Sin embargo, podría causar un error de compilación si el tipo T no es asignable a la interfaz I Entonces, en este caso, se está utilizando como una afirmación estática sobre un tipo.

El segundo caso es más común. Si bien puede parecer extraño descartar el resultado de una llamada a una función, puede tener más sentido en funciones con múltiples retornos. ¿Considerar una función foo que devuelve dos valores pero solo te interesa el primero? Puedes usar _ para ignorar el segundo:

a, _ = foo()

Puede obtener el mismo efecto creando otra variable para mantener el valor de retorno no deseado, pero esta función significa que no debe preocuparse por elegir un nombre único para él.