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 à échanger l'enregistreur au moment de l'exécution à l'aide d'une interface d'enregistrement 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éen, 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 n'est pas adaptée à 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.
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!