なぜmake()やnew()を使うのでしょうか?質問する

なぜmake()やnew()を使うのでしょうか?質問する

導入ドキュメントでは、new()との違いを説明するために多くの段落が割かれていますmake()が、実際には、ローカル スコープ内でオブジェクトを作成して返すことができます。

なぜアロケータのペアを使用するのでしょうか?

ベストアンサー1

Go には、メモリの割り当てと値の初期化の方法が複数あります。

&T{...}、、、&someLocalVarnewmake

複合リテラルを作成するときにも割り当てが発生することがあります。


new整数などの値を割り当てるために使用できるが、&intこれは違法である:

new(Point)
&Point{}      // OK
&Point{2, 3}  // Combines allocation and initialization

new(int)
&int          // Illegal

// Works, but it is less convenient to write than new(int)
var i int
&i

と の違いはnewmake次の例を見るとわかります。

p := new(chan int)   // p has type: *chan int
c := make(chan int)  // c has type: chan int

Go に と はないnewmake、組み込み関数 があるとしますNEW。その場合、サンプル コードは次のようになります。

p := NEW(*chan int)  // * is mandatory
c := NEW(chan int)

* 必須なので、次のようになります。

new(int)        -->  NEW(*int)
new(Point)      -->  NEW(*Point)
new(chan int)   -->  NEW(*chan int)
make([]int, 10) -->  NEW([]int, 10)

make(Point)  // Illegal
make(int)    // Illegal

はい、newmakeを 1 つの組み込み関数にマージすることは可能です。ただし、組み込み関数が 1 つだと、組み込み関数が 2 つある場合よりも、新しい Go プログラマーの間で混乱が生じる可能性があります。

上記のすべての点を考慮すると、newmakeを分離したままにしておく方が適切であると思われます。

おすすめ記事