Dans Go, la journalisation de trace présente un défi unique : minimiser le coût des instructions de journal désactivées dans les chemins critiques. Contrairement à C/C , Go ne dispose pas de macros de préprocesseur, ce qui nécessite d'explorer des solutions alternatives.
Une approche consiste à utiliser les interfaces fmt.Stringer et fmt.GoStringer. En retardant le formatage jusqu'à l'exécution du journal, des appels de fonction coûteux dans les arguments de journalisation peuvent être évités :
type LogFormatter interface { LogFormat() string } // Inside the logger if i, ok := i.(LogFormatter); ok { fmt.Println(i.LogFormat()) }
Une autre stratégie consiste à remplacer l'enregistreur au moment de l'exécution à l'aide d'une interface d'enregistreur ou au moment de la construction à l'aide de contraintes de construction. Cependant, cela nécessite de s'assurer qu'aucun appel coûteux n'est inséré dans les arguments de journalisation.
Une troisième option consiste à définir le Logger lui-même comme un bool, réduisant ainsi la verbosité tout en fournissant un moyen concis de contrôler la journalisation :
type Log bool func (l Log) Println(args ...interface{}) { fmt.Println(args...) } var debug Log = false if debug { debug.Println("DEBUGGING") }
Enfin, la génération de code peut être explorée, même si elle ne convient pas à la configuration du runtime. En utilisant gofmt -r ou en créant des fichiers à l'aide de texte/modèle, il est possible de créer des versions de débogage distinctes pour des scénarios de débogage spécifiques.
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