"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 > A recuperação de pânico pode modificar as variáveis ​​locais em literais de função em Go?

A recuperação de pânico pode modificar as variáveis ​​locais em literais de função em Go?

Postado em 2025-03-22
Navegar:641

Can Panic Recovery Modify Local Variables in Function Literals in Go?

pode pânico a recuperação modificar as variáveis ​​locais nos literais da função?

em Go, ao trabalhar com valores de retorno nomeados, você pode usar uma instrução de adiamento para modificar os valores antes de devolvê -los. No entanto, esse comportamento não é consistente ao usar variáveis ​​locais nos literais da função. adiar func () { se e: = recuperar (); e! = nil { resultado = -1 err = erros.new (por exemplo (string)) } } () bar() resultado = 100 err = nil retornar } func bar () { pânico ("pânico aconteceu") }

este código funciona conforme o esperado, definindo o resultado -1 e err para uma mensagem de erro personalizada após se recuperar de um pânico. No entanto, se usarmos variáveis ​​locais na função literal, o comportamento muda:

func foo() (result int, err error) {
    defer func() {
        if e := recover(); e != nil {
            result = -1
            err = errors.New(e.(string))
        }
    }()
    bar()

    result = 100
    err = nil
    return
}

func bar() {
    panic("panic happened")
}

Neste caso, o resultado é redefinido para 0 em vez de -1. Isso ocorre porque a declaração de adiamento na função literal não pode acessar ou modificar os valores de retorno nomeados, pois eles não estão mais no escopo. Crucial para usar os valores de retorno nomeados ao tentar modificá -los usando uma instrução de adiamento em uma função literal. Variáveis ​​locais nesses casos não podem ser acessadas ou modificadas.

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