はじめに プロダクトの仕様には、値が「ある」場合もあれば「ない (null)」場合もある nullable な要素がよく登場します。 例えば、次のようなものです。 ユーザーの二つ目のメールアドレス(ない人もいる) キャンセルされた予約のキャンセル理由(キャンセルされていないときは存在しない) 請求書の支払期日(未設定のケースがありうる) Go で書かれたライブラリなどの実装を見ていると、nullable な要素を扱う場合は「ポインタ」や「ゼロ値」が使われていることが多くみられました。 私たちもはじめはポインタを使って nullable な値を表現していたのですが、ポインタはパフォーマンスなどの別の用途でも使われるため、「ポインタが使われているからといって nullable とは限らない」という状態にだいぶ苦しめられました。 この記事では、仕様上の nullable を型として明示的に表現す

