【Go】newは(ほぼ)構造体にしか使わない
goでmakeと並んで使うnew。
makeは参照型のみでしたが、makeと違ってあらゆる型に使えます。
対象のポインタを取得するのに使う訳ですが、実際の開発用途としては構造体にしか使いません。
理由としては、構造体を値型のまま宣言して使う事がないからです。
newでポインタを取得してから使うのが一般的です。
newとアドレス演算子
同じような動作だと&を付けてアドレスを取得するものがあります。
こちらも動作としてはほぼ同じで、好きな方を使えばいいんじゃないかな。と、思ってましたが、一つだけ違う点がありました。
それは宣言時に構造体を初期化出来る事です。
packge main type Sample struct { a int b int } s := &Sample{a: 1, b: 2}
newだったら下記ように宣言してから代入します。
packge main type Sample struct { a int b int } s := new(Sample) s.a = 1 s.b = 2
僕の場合は、構造体だけ宣言する場合はnew使って、それ以外はアドレス演算子を使ってますかね。
周囲の人もそうしてる人が多いみたいです。
makeもそうですが、使わずとも宣言出来るので全く使わずに書いてる人もいます。
goは書き方でパフォーマンスが変わるので、そういった部分は意識しながら書きたいですね。