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