"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter la gestion générique des erreurs dans Go Without Generics ?

Comment implémenter la gestion générique des erreurs dans Go Without Generics ?

Publié le 2024-11-23
Parcourir:852

How to Implement Generic Error Handling in Go Without Generics?

Implémentation de la gestion générique des erreurs dans Go

L'absence de fonctionnalités génériques dans Go pose des problèmes lorsque l'on tente de généraliser les fonctionnalités. Un scénario courant est la nécessité d'une fonction générique de gestion des erreurs applicable à toute fonction renvoyant une valeur et une erreur.

L'exemple fourni montre une tentative de création d'une telle fonction à l'aide d'une interface vide :

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

Bien que cette approche fonctionne pour la gestion des erreurs, elle perd les informations de type, laissant l'interface résultante vide.

Génération de fonctions de gestion des erreurs spécifiques au type

Pour éviter le problème de informations de type perdues, envisagez d'utiliser la génération de code pour créer des implémentations spécialisées de la fonction de gestion des erreurs pour différents types. Ceci peut être réalisé à l'aide d'outils tels que "go generate", "gengen", "genny" ou "gen".

Par exemple, en utilisant "gen", vous pouvez définir un modèle :

// 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
}

Ce modèle peut être utilisé pour générer des implémentations spécifiques au type de P() :

gen generate

Cela créera des implémentations telles que :

// p_int.go

package main

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

En utilisant ces fonctions générées, les informations de type sont préservées et la gestion des erreurs peut être appliquée de manière transparente à des types spécifiques.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3