/note/tech

Goで、構造体の値返しとポインタ返しの使い分け

コピーコストが問題になる場合を除いては、基本的に値を返すべきです。

なるべく値型を使用したほうがいい理由の一つとして、コードの保守性の問題があります。

値型の場合、メンバへのアクセスがエラーを引き起こさないことはコンパイル時に確定しています。

しかし、ポインタの場合は参照先が存在するかどうかは実行時にしか分かりません。

つまり、アクセスする前にnilでないかどうかをチェックするか、関数がエラーを返していない場合にnilを返さないことを知っている上で取り扱わないと、panicを引き起こす可能性があります。

MEMO: