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も対象になります。