ブックマーク / zenn.dev/mpyw (1)

  • なぜ Go ではロガーをコンストラクタ DI してはならないのか

    問題のある実装パターン 共通実装 以下のような applog パッケージ上のロガー実装を考えましょう。ここでは Go 標準の log.Logger をラップしていますが,様々な実装に拡張できることを想定しています。 package applog import ( "fmt" "log" "os" ) type Logger interface { Info(message string) Error(message string) } func NewLogger() Logger { return &logger{ inner: log.New(os.Stdout, "", log.LstdFlags), } } var _ Logger = (*logger)(nil) type logger struct { inner *log.Logger } func (l *logger)

    なぜ Go ではロガーをコンストラクタ DI してはならないのか
    jnst
    jnst 2023/09/06
    リクエストコンテキスト専用のloggerを作ってるだけなのでcontextの作法として間違ってないですよ trace_idだけcontextいれるとlog出力するコード書くたびにloggerにセットするコード書く必要あるので糞だるい
  • 1