print - golang map
Devuelve el mapa como ''ok'' en Golang en las funciones normales (1)
map
es diferente porque es un tipo incorporado y no una función. Las dos formas de acceder a un elemento de un map
se especifican mediante la Especificación de idioma Go: Expresiones de índice .
Con funciones, no puedes hacer esto. Si una función tiene 2 valores de retorno, debe "esperar" ambos o ninguno.
Sin embargo, puede asignar cualquiera de los valores devueltos al identificador en blanco :
s, b := Hello() // Storing both of the return values
s2, _ := Hello() // Storing only the first
_, b3 := Hello() // Storing only the second
También puede optar por no almacenar ninguno de los valores devueltos:
Hello() // Just executing it, but storing none of the return values
Nota: también puede asignar los dos valores de retorno al identificador en blanco, aunque no tiene ningún uso (salvo validar que tiene exactamente 2 valores de retorno):
_, _ = Hello() // Storing none of the return values; note the = instead of :=
También puedes probar estos en el Go Playground .
Función de ayuda
Si lo usa muchas veces y no desea usar el identificador en blanco, cree una función auxiliar que descarte el segundo valor de retorno:
func Hello2() string {
s, _ := Hello()
return s
}
Y ahora puedes hacer:
value := Hello2()
fmt.Println(value)
En Go, los siguientes trabajos (tenga en cuenta que un uso del mapa tiene un retorno, el otro tiene dos devoluciones)
package main
import "fmt"
var someMap = map[string]string { "some key": "hello" }
func main() {
if value, ok := someMap["some key"]; ok {
fmt.Println(value)
}
value := someMap["some key"]
fmt.Println(value)
}
Sin embargo, no tengo idea de cómo hacer esto con mi propia función. ¿Es posible tener un comportamiento similar con un retorno opcional como el map
?
Por ejemplo:
package main
import "fmt"
func Hello() (string, bool) {
return "hello", true
}
func main() {
if value, ok := Hello(); ok {
fmt.Println(value)
}
value := Hello()
fmt.Println(value)
}
No compilaremos (debido al error multiple-value Hello() in single-value context
) ... ¿hay alguna manera de hacer que esta sintaxis funcione para la función Hello()
?