🐁
Go で nil だったら適切な値を返したい
はじめに
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
オリジナルを参考にした実装です。
渡された値がすべて nil
だった場合は安全に倒して与えられた型のゼロ値を返すようにしました。
Or
関数でも良いですがもう少し個別に使いやすい関数を実装してみました。
NilZero
与えられた値が nil
だった場合にその型の zero
値を返す関数です。
NilDef
与えられた値が nil
だった場合に設定したデフォルト値を返す関数です。
nilx というライブラリに
まとめました。
よければ使ってみてください。
おわりに
ライブラリを自作してみましたが標準機能もしくはほかのライブラリで同様の処理ができる場合は教えていただきたいです。
Discussion