Préserver l'intégrité de plusieurs arguments dans les erreurs formatées
Pour implémenter une version personnalisée des erreurs. Nouveau qui permet le formatage des arguments variables, nous sommes confrontés à un défi technique. Comme le montre le code fourni :
<code class="go">func NewError(format string, a ...interface{}) error { return errors.New(fmt.Sprintf(format, a)) }</code>
Le paramètre ...a fusionne involontairement en un seul tableau lors de l'invocation de la méthode, ce qui entraîne un formatage incorrect. La solution réside dans l'émulation de la fonctionnalité de fmt.Errorf, comme le montre son code source :
<code class="go">func Errorf(format string, a ...interface{}) error { return errors.New(Sprintf(format, a...)) }</code>
Remarquez que l'opérateur ... suit a après la liste des paramètres. Dans Go, cette syntaxe permet de transmettre des arguments sous forme de valeurs distinctes plutôt que sous forme d'un seul tableau fusionné. La spécification décrit ce comportement :
Si l'argument final est attribuable à un type de tranche []T, il peut être transmis inchangé comme valeur d'un paramètre ...T si l'argument est suivi de... .
En incorporant l'opérateur ... comme vu dans fmt.Errorf, nous garantissons que plusieurs arguments conservent leur individualité lors du formatage, ce qui entraîne le comportement souhaité :
<code class="go">func NewError(format string, a ...interface{}) error { return errors.New(fmt.Sprintf(format, a...)) }</code>
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!