Non solo essi danno lo stesso valore risultante, ma se noi destiniamo qualcosa in entrambe le direzioni e guardare i loro valori ...
// 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)
}
... vedremo che essi sono in realtà allocato in slot di memoria consecutivi. Uscita tipica: 0x10328100 0x10328108
. Non sono sicuro se si tratta di un dettaglio di implementazione o di una parte della specifica, ma dimostra che vengono entrambi allocati dallo stesso pool.
Play around with the code here.
Come per inizializzare con il nuovo, secondo 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.
Perché funzioni in movimento non possono essere sovraccaricati, e questo non è una funzione variadic, non c'è modo per passare i dati di inizializzazione. Invece, go lo inizializzerà con qualsiasi versione di 0
ha senso per il tipo e qualsiasi campo membro, a seconda dei casi.
fonte
2014-08-13 23:35:43
C'è un modo per inizializzare i campi usando nuovo? – allyourcode
@allyourcode non la penso così. http://stackoverflow.com/questions/4498998/how-to-initialize-members-in-go-struct – Woot4Moo
La documentazione dice allora, perché hanno scelto di includere la funzione 'new'? Ho pensato che "go" riguardasse la non sovrapposizione di funzionalità. –