"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 > Como posso lidar com valores de retorno incorretos de funções adiadas no Go?

Como posso lidar com valores de retorno incorretos de funções adiadas no Go?

Publicado em 2024-11-03
Navegar:383

How can I handle erroneous return values from deferred functions in Go?

Tratamento de funções adiadas com valores de retorno incorretos no Go

gometalinter e errcheck geram corretamente um aviso quando uma função que retorna uma variável é adiada sem verificando seu erro retornado. Isso pode levar a erros não tratados e possíveis problemas de tempo de execução.

A linguagem para lidar com esse cenário não é adiar a função em si, mas sim envolvê-la em outra função que verifica o valor retornado. Aqui está um exemplo:

defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()

Ao usar uma função anônima, você pode capturar o valor de retorno da função adiada e lidar com quaisquer erros que ocorram.

Como alternativa, você pode criar uma função auxiliar para simplificar o processo :

func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}

Esta função auxiliar pode então ser usada para adiar múltiplas funções, garantindo que seus valores de retorno sejam verificados:

defer Check(r.Body.Close)
defer Check(SomeOtherFunc)

Você pode até estender a função auxiliar para aceitar múltiplas funções:

func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            // Handle the error
        }
    }
}

Isso permite adiar várias funções e lidar com seus erros de maneira mais concisa e organizada:

defer Checks(r.Body.Close, SomeOtherFunc)

Para garantir que os erros sejam tratados na ordem correta, a função Checks() usa um loop descendente para executar as funções na ordem inversa de sua declaração. Isso se alinha com a ordem de execução das funções adiadas, onde a última função adiada é executada primeiro.

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