それらは同じ結果の値を与えるだけでなく、何かを両方の方法で割り当ててそれらの値を見ると...
// Adapted from http://tour.golang.org/#30
package main
import "fmt"
type Vertex struct {
X, Y int
}
func main() {
v := &Vertex{}
v2 := new(Vertex)
fmt.Printf("%p %p", v, v2)
}
...実際には、連続したメモリ スロットに割り当てられていることがわかります。典型的な出力: 0x10328100 0x10328108
. これが実装の詳細なのか仕様の一部なのかはわかりませんが、両方が同じプールから割り当てられていることを示しています。
ここでコードをいじってみましょう。
new による初期化に関しては、言語仕様によると: The built-in function new takes a type T and returns a value of type *T. The memory [pointed to] is initialized as described in the section on initial values.
go の関数はオーバーロードできず、これは可変引数関数ではないため、初期化データを渡す方法はありません。代わりに、go は必要に0
応じて、型と任意のメンバー フィールドにとって意味のある のバージョンでそれを初期化します。