Al intentar devolver múltiples valores en Go, puede parecer confuso por qué cierta sintaxis es válida y otras no. Para ilustrar esto, considere los siguientes dos fragmentos de código:
func FindUserInfo(id string) (Info, bool) { it, present := all[id] return it, present }
El primer fragmento de código es válido y devuelve los valores Info y bool. Sin embargo, el segundo fragmento no es válido:
func FindUserInfo(id string) (Info, bool) { return all[id] }
Esto plantea la pregunta de por qué el primer fragmento es válido y el segundo no. Además, uno podría preguntarse si hay una manera de evitar el uso de variables temporales como ésta y las presentes.
La clave para entender este comportamiento radica en la "coma "Está bien". En Go, al acceder a un mapa, el resultado es un par de valores: el valor asociado a la clave y un booleano que indica si la clave existe en el mapa. Esto se usa a menudo para diferenciar entre una clave faltante y un valor cero.
En el primer fragmento de código, la expresión all[id] devuelve un par de valores, que se le asignan y están presentes. La declaración de devolución luego devuelve estos valores.
El compilador desempeña un papel a la hora de determinar si una asignación de valores múltiples es válida. Si la función devuelve varios valores pero el destinatario del lado izquierdo tiene solo una variable, el compilador emitirá un error. Esto se debe a que el compilador espera que el número de valores devueltos coincida con el número de variables que los reciben.
En el caso del segundo fragmento de código, la expresión return all[id] solo devuelve un valor, lo cual es incompatible con las dos variables en el lado izquierdo. Por lo tanto, el compilador informa un error.
Desafortunadamente, no hay forma de evitar el uso de variables temporales al devolver múltiples valores en una función Go. Esto se debe a que el compilador requiere que la cantidad de valores devueltos coincida con la cantidad de variables que los reciben. Sin embargo, es posible minimizar el uso de variables temporales utilizando valores de retorno con nombre o devolviendo una estructura.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3