Go のトレース ログ記録には、クリティカル パスで無効化されたログ ステートメントのコストを最小限に抑えるという特有の課題があります。 C/C とは異なり、Go にはプリプロセッサ マクロがないため、代替ソリューションを検討する必要があります。
1 つのアプローチには、 fmt.Stringer および fmt.GoStringer インターフェイスの使用が含まれます。ログの実行までフォーマットを遅らせることで、ロギング引数での高価な関数呼び出しを回避できます。
type LogFormatter interface { LogFormat() string } // Inside the logger if i, ok := i.(LogFormatter); ok { fmt.Println(i.LogFormat()) }
もう 1 つの戦略は、ロガー インターフェイスを使用して実行時に、またはビルド制約を使用してビルド時にロガーをスワップアウトすることです。ただし、これには、高価な呼び出しがロギング引数に挿入されていないことを確認する必要があります。
3 番目のオプションは、Logger 自体を bool として定義し、冗長性を減らしながらロギングを制御する簡潔な方法を提供することです。
type Log bool func (l Log) Println(args ...interface{}) { fmt.Println(args...) } var debug Log = false if debug { debug.Println("DEBUGGING") }
最後に、コード生成を検討できますが、これはランタイム構成には適していません。 gofmt -r を使用するか、テキスト/テンプレートを使用してファイルをビルドすることにより、特定のデバッグ シナリオに対して個別のデバッグ ビルドを作成できます。
以上がGo で無効なトレース ロギング ステートメントのコストを最小限に抑えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。