"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 implementar o tratamento de erros genéricos no Go Without Generics?

Como implementar o tratamento de erros genéricos no Go Without Generics?

Publicado em 23/11/2024
Navegar:148

How to Implement Generic Error Handling in Go Without Generics?

Implementando o tratamento de erros genéricos no Go

A ausência de recursos genéricos do Go apresenta desafios ao tentar generalizar funcionalidades. Um cenário comum é a necessidade de uma função genérica de tratamento de erros aplicável a qualquer função que retorne um valor e um erro.

O exemplo fornecido demonstra uma tentativa de criar tal função usando uma interface vazia:

func P(any interface{}, err error) (interface{}) {
    if err != nil {
        panic("error: "  err.Error())
    }
    return any
}

Embora essa abordagem funcione para tratamento de erros, ela perde informações de tipo, deixando a interface resultante vazia.

Gerando funções de tratamento de erros específicas do tipo

Para evitar o problema de informações de tipo perdidas, considere usar a geração de código para criar implementações especializadas da função de tratamento de erros para diferentes tipos. Isso pode ser conseguido usando ferramentas como "go generate", "gengen", "genny" ou "gen".

Por exemplo, usando "gen", você pode definir um modelo:

// template.go

package main

import "fmt"

func P[T any](v T, err error) (T) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}

Este modelo pode ser usado para gerar implementações específicas do tipo de P():

gen generate

Isso criará implementações como:

// p_int.go

package main

func PInt(v int, err error) (int) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}

Ao usar essas funções geradas, as informações de tipo são preservadas e o tratamento de erros pode ser aplicado a tipos específicos perfeitamente.

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