Maison >développement back-end >Golang >Quand devez-vous utiliser `%v` pour imprimer dans Go ?

Quand devez-vous utiliser `%v` pour imprimer dans Go ?

DDD
DDDoriginal
2024-11-26 09:09:08510parcourir

When Should You Use `%v` for Printing in Go?

Utiliser %v pour l'impression : problèmes potentiels à prendre en compte

Alors que le verbe %v permet d'imprimer à la fois des entiers (%d) et des chaînes (%s), son utilisation doit être considérée avec prudence pour éviter un formatage involontaire problèmes.

Format par défaut vs format spécifique

Contrairement au verbe %d, qui demande au package fmt d'imprimer la valeur sous forme de nombre (en base 10), le verbe %v utilise le format par défaut. Ce format par défaut peut être remplacé en implémentant l'interface fmt.Stringer (avec une méthode de chaîne String()) pour votre type personnalisé.

Exemple

Considérez le code suivant en utilisant un type personnalisé MyInt qui implémente fmt.Stringer interface :

type MyInt int

func (mi MyInt) String() string {
    return fmt.Sprintf("*%d*", int(mi))
}

func main() {
    var mi MyInt = 2
    fmt.Printf("%d %v", mi, mi)
}

Sortie :

2 *2*

Lors de l'utilisation de %v, le package fmt vérifie si la valeur implémente fmt.Stringer et appelle son String() méthode. Cela entraîne l'affichage de la valeur avec le format remplacé ("2" au lieu de "2").

Règles de formatage

Le fmt le package suit un ensemble spécifique de règles de formatage lors de l’utilisation %v :

  1. Il 检查接口实现:

    • reflect.Value :替换为实际值。
    • Formatter:使用自定义格式器进行格式化。
    • GoStringer(带有 #v):调用 GoStringer方法。
  2. String() 方法:如果实现 String() string,将其值转换为字符串。
  3. Erreur方法:如果实现 error 接口,使用 Error 方法将其值转换为字符串。

Conclusion

Bien que ce soit techniquement Il est possible de toujours utiliser %v pour l'impression, il est généralement recommandé d'utiliser des verbes spécifiques comme %d et %s pour les entiers et les chaînes. L'utilisation de %v peut entraîner un comportement de formatage inattendu si vos types implémentent certaines interfaces, en particulier fmt.Stringer.

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