In golang, sembra che non ci siano costruttori, ma è consigliabile allocare un oggetto di tipo struct usando una funzione, solitamente chiamata "New" + TypeName, ad esempioLayout di memoria Golang rispetto a C++/C
func NewRect(x,y, width, height float) *Rect {
return &Rect(x,y,width, height)
}
Tuttavia, non sono sicuro del layout di memoria di Go. In C/C++, questo tipo di codice significa che si restituisce un puntatore, che punta a un oggetto temporaneo perché la variabile è allocata nello stack e la variabile potrebbe essere un cestino dopo il ritorno della funzione. In Golang, devo preoccuparmi di questo genere di cose? Perché Sembra che nessuno standard dimostri che tipo di dati saranno allocati nello stack e quale tipo di dati saranno allocati nell'heap.
Come in Java, sembra esserci un punto specifico che il tipo di base come int, float verrà allocato nello stack, l'altro oggetto derivato dall'oggetto verrà allocato nello heap. In golang, c'è un discorso specifico su questo?
Sarà assegnato sullo heap. Il compilatore Go può rilevare quando un oggetto vive all'esterno dello stack e lo assegna automaticamente all'heap. Puoi vederlo se compili con 'go build -gcflags '-m'' per vedere le decisioni di ottimizzazione. – siritinga
@python: il tuo intuito era giusto che non ti devi preoccupare di questo. In pratica è vero che sarà assegnato all'heap, ma il modello di memoria di Go è molto semplice, e in effetti non devi pensare a pile e pile. Puoi solo pensare alle variabili. Se si prende l'indirizzo di qualcosa, Go garantirà che quell'indirizzo è sempre valido fino a quando si ha un puntatore. Non dovrebbe importarti come programmatore come ciò accade. (anche se, ovviamente, può essere interessante pensare a come è implementato, e ci sono cose interessanti anche lì) – joshlf
grazie per tutti i tuoi ragazzi rispondi allo – python