"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué las funciones Go no pueden devolver varios valores directamente?

¿Por qué las funciones Go no pueden devolver varios valores directamente?

Publicado el 2024-11-20
Navegar:540

Why Can't Go Functions Return Multiple Values Directly?

Problema de devolución de múltiples valores de Go

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.

Explicando el patrón "Coma Ok"

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.

Consideraciones del compilador

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.

Evitar variables temporales

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.

Último tutorial Más>

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