print golang go return-value multiple-return-values

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() ?