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.
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.
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.
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.
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