🐁

Go で nil だったら適切な値を返したい

2024/04/15に公開

はじめに

Go 1.22 のリリースで cmp.Or という関数が実装されました。

The new function Or returns the first in a sequence of values that is not the zero value.

これは与えられた引数のうち一番最初に zero 値じゃなかったものを返すという処理ができます。

例えば以下のように

before

port := os.Getenv("PORT")
if port == "" {
	port = "8080"
}

after

port := cmp.Or(os.Getenv("PORT"), "8080")

環境変数で設定した値がなかった場合はデフォルト値を設定するみたいな処理を書くときにワンライナーで記述できるようになりました。
これと同じようなことを nil 値が渡される可能性があるときにやりたいなあと思って実際に処理を考えてみたので紹介します。

NilOr

オリジナルを参考にした実装です。

https://github.com/otakakot/nilx/blob/main/nilor.go

渡された値がすべて nil だった場合は安全に倒して与えられた型のゼロ値を返すようにしました。

Or 関数でも良いですがもう少し個別に使いやすい関数を実装してみました。

NilZero

与えられた値が nil だった場合にその型の zero 値を返す関数です。

https://github.com/otakakot/nilx/blob/main/nilzero.go

NilDef

与えられた値が nil だった場合に設定したデフォルト値を返す関数です。

https://github.com/otakakot/nilx/blob/main/nildef.go

nilx というライブラリに

まとめました。

https://github.com/otakakot/nilx

よければ使ってみてください。

おわりに

ライブラリを自作してみましたが標準機能もしくはほかのライブラリで同様の処理ができる場合は教えていただきたいです。

Discussion