🍣

初期化処理にはsync.OnceValueを使う

2025/01/04に公開

go1.21.0 (released 2023-08-08) から導入
https://go.dev/doc/go1.21

sync.Once で十分便利だったけど、go1.21.0からは sync.OnceValue というさらに便利なものが用意されている。

var config = sync.OnceValue(func() *Conf { 
	c := &Conf{}
	if err := envconfig.Process(prefix, c); err != nil {
		panic(err)
	}
	return c
})

if config().Env == "stg" {
    // do something
}

Discussion