2015-10-27 38 views
5

たとえば、go github packageとします。定義されたすべての構造体のほぼすべてのメンバは、値ではなく値へのポインタです。Golangで構造体メンバをポインタにするのは一般的ですか?

この慣用的なGoですか?どうして?

私は構造体のサイズを小さくしていることを理解しています(ポインタのサイズがそれが指している値のサイズより小さいと仮定します)。しかし、なぜ値の構造体を持たず、代わりにポインタで構造体を渡すのでしょうか?

答えて

8

githubパッケージでは、ほとんどの構造体がgithub apiのjsonから直列化/逆シリアル化されることが意図されています。 intのゼロ値が0であるポインタのゼロ値は、nilあるため、それらは*int代わりにintを使用

理由があります。これにより、クライアントは「このフィールドはレスポンスに含まれていません」と「このフィールドの値はゼロ」の間で区別できます。

これは時間のようなものに特に役に立ちます。ここでは、nilable型がないと、00-00-0000の型の日付が多くなります。

関連する問題