"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 o `adie` afeta os valores de retorno nomeados de maneira diferente dos parâmetros de entrada no Go?

Por que o `adie` afeta os valores de retorno nomeados de maneira diferente dos parâmetros de entrada no Go?

Postado em 2025-03-04
Navegar:244

Why Does `defer` Affect Named Return Values Differently Than Input Parameters in Go?

Entendendo os efeitos do adiamento nas declarações variáveis ​​em go

em go, o uso da palavra -chave difer permite que as funções tenham o código executado no momento de seu retorno, mesmo que ocorra pânico. No entanto, quando se trata de variáveis ​​declaradas de maneiras diferentes em uma função, os resultados podem variar, levando à confusão. adiar func () {i} () retornar i } func main () { fmt.println (c (0)) // imprime 0 }

Neste exemplo, chamamos a função C e passamos o valor 0. No entanto, quando imprimimos o resultado, obtemos 0 em vez do esperado 1. Isso ocorre porque eu é declarado como um parâmetro de entrada para a função. Depois que a declaração de retorno é executada, a função de adiamento é chamada, mas o incremento não tem efeito no valor de retorno. adiar func () {i} () retornar i } func main () { fmt.println (c1 ()) // imprime 1 }

aqui, eu é declarado como o parâmetro de resultado para a função C1. Quando a declaração de retorno é executada, o valor de I é definido como o valor de retorno. No entanto, a função de adiamento ainda pode modificar o valor de I antes de ser retornado. Isso resulta na saída de 1. adiar func () {i} () retornar 2 } func main () { fmt.println (c2 ()) // imprime 3 }

func c(i int) int {
    defer func() { i   }()
    return i
}

func main() {
    fmt.Println(c(0)) // Prints 0
}

O poder dos parâmetros de resultado nomeado

A parte principal desses exemplos é a distinção entre os parâmetros de entrada e os parâmetros de resultado nomeados. Os parâmetros de entrada são transmitidos para uma função, enquanto os parâmetros de resultado nomeados são variáveis ​​que mantêm os valores de retorno da função. As funções de adiamento podem modificar os parâmetros de resultado nomeados após a execução da declaração de retorno, mas eles não podem afetar os parâmetros de entrada.

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