Gestion des erreurs génériques avec les interfaces : un dilemme
Dans Go, la programmation générique reste insaisissable, ce qui amène les développeurs à rechercher des alternatives. Un problème courant survient lorsqu'il s'agit de fonctions renvoyant à la fois un résultat et une erreur.
Le problème :
L'extrait de code ci-dessous tente de définir une fonction générique P qui panique en cas d'erreur :
<code class="go">func P(any interface{}, err error) (interface{}) { if err != nil { panic("error: " + err.Error()) } return any }</code>
Cependant, l'utilisation de n'importe quelle erreur entraîne la perte des informations de type. Cela peut être problématique, en particulier lors de l'appel de fonctions de bibliothèque.
Exploration de solutions :
Une approche consiste à générer manuellement des versions personnalisées de la fonction P pour chaque type spécifique dont vous avez besoin. à gérer. Ceci peut être réalisé à l'aide de la commande go generate :
<code class="go">//go:generate genny -in=./template.go -out=./p_gen.go gen "anytype,error,string"</code>
Cela générera des fonctions P spécialisées pour les types spécifiés.
Une autre solution consiste à utiliser des outils go-lint, tels que golangci-lint , pour appliquer les normes de codage et détecter les erreurs potentielles liées à la perte d'informations de type.
Conclusion :
Bien que Go manque de syntaxe générique explicite, il existe des moyens de simuler un comportement générique en utilisant constructions alternatives. Cependant, il est crucial d'être conscient des mises en garde et des limitations potentielles impliquées, telles que la perte d'informations de type lors de l'utilisation de l'interface{}, et d'adapter votre code en conséquence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!