"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que as funções Go não podem retornar vários valores diretamente?

Por que as funções Go não podem retornar vários valores diretamente?

Publicado em 2024-11-20
Navegar:969

Why Can't Go Functions Return Multiple Values Directly?

Problema de retorno de vários valores em Go

Ao tentar retornar vários valores em Go, pode parecer confuso por que determinada sintaxe é válida e outras não. Para ilustrar isso, considere os dois trechos de código a seguir:

func FindUserInfo(id string) (Info, bool) {
    it, present := all[id]
    return it, present
}

O primeiro trecho de código é válido e retorna os valores Info e bool. No entanto, o segundo snippet é inválido:

func FindUserInfo(id string) (Info, bool) {
    return all[id]
}

Isso levanta a questão de por que o primeiro trecho é válido e o segundo não. Além disso, pode-se perguntar se existe uma maneira de evitar o uso de variáveis ​​​​temporárias como esta e presente.

Explicando o padrão "Comma Ok"

A chave para entender esse comportamento está na "vírgula ok" padrão. No Go, ao acessar um mapa, o resultado é um par de valores: o valor associado à chave e um booleano que indica se a chave existe no mapa. Isso geralmente é usado para diferenciar entre uma chave ausente e um valor zero.

No primeiro trecho de código, a expressão all[id] retorna um par de valores, que são atribuídos a ela e presentes. A instrução return então retorna esses valores.

Considerações do compilador

O compilador desempenha um papel na determinação se uma atribuição de vários valores é válida. Se a função retornar vários valores, mas o destinatário do lado esquerdo tiver apenas uma variável, o compilador emitirá um erro. Isso ocorre porque o compilador espera que o número de valores retornados corresponda ao número de variáveis ​​que os recebem.

No caso do segundo trecho de código, a expressão return all[id] retorna apenas um valor, o que é incompatível com as duas variáveis ​​no lado esquerdo. Portanto, o compilador relata um erro.

Evitando variáveis ​​temporárias

Infelizmente, não há como evitar o uso de variáveis ​​temporárias ao retornar vários valores em uma função Go. Isso ocorre porque o compilador exige que o número de valores retornados corresponda ao número de variáveis ​​que os recebem. No entanto, é possível minimizar o uso de variáveis ​​temporárias usando valores de retorno nomeados ou retornando uma estrutura.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3