Lapis Lazuli

technical blog for web developer

【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は書き方でパフォーマンスが変わるので、そういった部分は意識しながら書きたいですね。