以下の内容はhttps://tech-up.hatenablog.com/entry/2018/11/28/211009より取得しました。


new【Go】

ポインタ型を宣言する際、同時にメモリ領域を確保する場合に使用します。

var p *int = new(int)
fmt.Println(*p)    // 0  p番地の実体を出力。メモリ領域を確保したため、初期値0が設定されている
*p++
fmt.Println(*p)    // 1


newを使わずに宣言した場合、メモリ領域が確保されていないためnilとなります。

var p2 *int
fmt.Println(p2)    // <nil>
fmt.Println(*p2)    // エラー

アドレスがnilの物に対してはnew()することで、アドレスを割り当てることができます。

var p2 *int
fmt.Println(p2)    // <nil>
fmt.Println(*p2)    // エラー

p2 = new(int)
fmt.Println(p2)    // 0xc000088018
fmt.Println(*p2)    // 0


スライスやmapに使うmakeがありますが、makeはポインタではなく値に対して操作する関数です。
newはポインタに対する関数であり、他にstructも対象になります。




以上の内容はhttps://tech-up.hatenablog.com/entry/2018/11/28/211009より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14