Maison >développement back-end >Golang >Comment puis-je créer une fonction d'erreur personnalisée similaire à fmt.Sprintf en utilisant fmt.Errorf ?

Comment puis-je créer une fonction d'erreur personnalisée similaire à fmt.Sprintf en utilisant fmt.Errorf ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-05 10:19:021129parcourir

How can I create a custom error function similar to fmt.Sprintf using fmt.Errorf?

Messages d'erreur formatés avec fmt.Errorf

Problème initial :

Vous avez cherché à construire une version personnalisée d'erreurs.New qui met en parallèle les paramètres d'entrée de fmt.Sprintf. Cependant, lorsque vous avez implémenté cette fonction :

<code class="go">func NewError(format string, a ...interface{}) error {
    return errors.New(fmt.Sprintf(format, a))
}</code>

Vous avez rencontré un problème où « a » est devenu un paramètre de tableau solitaire dans NewError(). Cela a conduit fmt.Sprintf à remplacer de manière inadéquate un seul argument dans votre chaîne de format.

Solution :

L'obstacle que vous avez rencontré provient de l'absence de... (le points de suspension) après le paramètre « a » dans votre déclaration de fonction. Selon la spécification Go, cette omission empêche votre code de gérer correctement le nombre variable d'arguments.

fmt.Errorf à la rescousse

Par hasard, fmt.Errorf est déjà présente la fonctionnalité souhaitée que vous aviez l'intention d'implémenter :

<code class="go">func Errorf(format string, a ...interface{}) error {
    return errors.New(Sprintf(format, a...))
}</code>

En ajoutant les points de suspension, vous permettez à fmt.Errorf d'interpréter habilement « a » comme un nombre variable d'arguments, répondant habilement aux besoins de votre formaté. messages d'erreur.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn