Dev Study
Go コース

27. new と複合リテラル — 値を作る二つの方法

Go で新しい値を作る方法は大きく二つあります。一つは複合リテラルで、Point{X: 1, Y: 2} のように型名と中括弧で値を直接記述します。&Point{X: 1, Y: 2} と先頭に & を付ければ、その値へのポインタが得られます。構造体やスライス、マップを作るときはこの複合リテラルが最もよく使われます。

もう一つは組み込み関数 new です。new(T) は型 T のゼロ値を一つ用意し、そこへのポインタ *T を返します。たとえば new(int) は値 0 を確保して *int を返します。new はフィールドを指定せずゼロ値のまま割り当てたいときに使え、p := new(Point) は p := &Point{} とほぼ同じ意味になります。

実務では、初期値を指定して作れる複合リテラル(&T{...})の方が読みやすいため、構造体ではそちらが好まれます。new はゼロ値のポインタが欲しいだけの場面で簡潔に書けますが、出番は限られます。なお make はスライス・マップ・チャネル専用で値ではなく初期化済みの参照を返すもので、new とは役割が異なる点を区別しておきましょう。

▶ サンプルコードを実行してみよう(自由に書き換えてOK)

Go
公式ドキュメントで詳しく ↗