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