Golangでnewとmakeの違いは何ですか?
Go言語では、newとmakeはメモリを割り当てるための2つの組み込み関数です。
- 新しい関数:
- 新しい関数は、値のポインタを割り当てて初期化し、そのポインタを返します。
- 新しい関数は、1つの型を引数として受け取り、その型のポインタを返す。
- メモリの割り当てはゼロに設定され、つまりすべてのビットがゼロ値に設定されています。
- new 関数は、新しく割り当てられたゼロ値を指すポインタを返します。
- 例えば:
- var p *int
p = new(int)
*p = 42
fmt.Println(*p) // 出力: 42 - make関数:
- make 関数は、組み込み参照型(スライス、マップ、チャネルなど)のオブジェクトを作成するために使用されます。
- make関数の引数は型と長さ(オプション、チャネルには適用されない)です。
- make 関数は、その型の初期化された非ゼロ値を返します。
- 例:
- var s []int
s = make([]int, 5, 10)
s[0] = 1
fmt.Println(s) // 表示:[1 0 0 0 0]
以上の理由から、new関数はゼロ値を指すポインタを返し、make関数は初期化されたゼロでない値を返す。