今回使うもの

x/net/context です。 今回は簡単に、SetしてGetする処理を書きます。

package間でloggerを渡したいという過程で進めます。 loggerは、uber-go/zap

import "golang.org/x/net/context"

セット

logger       = zap.NewJSON()
ctx := context.Background() 
ctx = context.WithValue(ctx, "logger", logger)

このようにloggerというkeyでloggerを設定

func Hoge(ctx context.Context) error { 
  logger := ctx.Value("logger").(zap.Logger)
  logger.Info("context is ok")
}

このように、context に logger というキーで設定した、zap.Loggerを取り出しています。 この時、 .(zap.Logger) とキャストしている理由は、何も無ければ interface{} となってしまうため、明示的に変更しています。

追記

Golang 1.7になると、標準libraryとして入るようです https://tip.golang.org/doc/go1.7#context