技術向上

プログラミングの学び、気になるテクノロジーやビジネストレンドを発信

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