一時停止されたステートメントのパフォーマンスが最適化された Go でのトレース ロギング
クリティカル パスでは、低レベルのデバッグ/トレース ロギング ステートメントを残すことでランタイムが可能になります必要に応じてそれらをアクティブ化するための設定を行います。このロギングは、無効なステートメントに対する影響を最小限に抑える必要があり、ブール値チェックに限定するのが理想的です。
C/C では、LOG マクロはフラグをチェックした後でのみ評価し、有効な場合にのみヘルパー関数を呼び出します。 Go はどのようにこれを実現できますか?
ログ メッセージは無効化に関係なく完全にフォーマットされるため、log.Logger で io.Discard を使用することは効果的ではありません。
1 つの方法は、Enabled フラグを使用して EnabledLogger を作成することです。ロギングを処理するために log.Logger をデリゲートします。これは書式設定に対処しますが、有効化に関係なく引数を評価します。
引数の評価を延期するには、複素数値に対して Stringify ラッパーを使用することを検討してください。ただし、このアプローチは依然として冗長であり、エラーが発生しやすくなります。
または、ログを記録する前に有効になっているかどうかを手動で確認します。これはより簡潔ですが、見落としを避けるために規律が必要です。
結局のところ、Go の引数の厳密な評価により、オプションが制限されます。実行時の構成が完全ではありませんが、次のパターンは実行可能です:
以上が中断されたステートメントのパフォーマンスを最適化して、Go で効率的なトレース ロギングを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。