Golangの初期値
Golangはプリミティブ型にそれぞれ初期値を持っている。
string型 なら""
int型 なら0
など、ゼロ値という名前でそれぞれのプリミティブ型を定義した時になんの値が入っているかが既に決まっている。
しかし、フィールド変数の型をユーザ定義型にしている構造体を扱う場合、単純に構造体のインスタンスを生成してしまうと、ユーザ定義型を遡ってプリミティブ型のゼロ値を代入された構造体が生成され、特定のフィールドだけnil にすることができません。
こうしてしまうと、他のAPIからjson を読み込みたい時などに全てのフィールドに空文字が入ってしまったり、0 が入ってしまったりしてしまうため、あまり良いとは言えません。
解決策
フィールド定義を行う時にユーザ定義型のポインタ型にしましょう。
ポインタ型のゼロ値はnil なので、代入されていないフィールドが自動的にnil になって返却されます。
参考元