Nicht nur, dass sie den gleichen resultierenden Wert geben, aber wenn wir etwas in beiden Richtungen und schauen auf ihren Wert zuzuordnen ...
// 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)
}
... wir werden sehen, dass sie in der Tat in aufeinanderfolgenden Speicherplätzen zugewiesen. Typische Ausgabe: 0x10328100 0x10328108
. Ich bin mir nicht sicher, ob dies ein Implementierungsdetail oder ein Teil der Spezifikation ist, aber es zeigt, dass sie beide aus demselben Pool zugewiesen werden.
Play around with the code here.
Was mit neuer Initialisierung nach the language spec: 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.
Da Funktionen in Go nicht überlastet werden, und dies ist keine variadische Funktion, gibt es keine Möglichkeit, in jeder Initialisierung Daten zu übergeben. Stattdessen wird go mit der Version 0
initialisieren, die für den Typ und alle Mitgliedsfelder sinnvoll ist.
Gibt es eine Möglichkeit, Felder mit neuen zu initialisieren? – allyourcode
@allyourcode glaube nicht. http://stackoverflow.com/questions/4498998/how-to-initialize-members-in-go-struct – Woot4Moo
Sagt die Dokumentation dann, warum sie gewählt haben, die 'neue' Funktion einzuschließen? Ich dachte, 'go 'war alles über nicht überlappende Funktionalität .. –