Il modo migliore per chiedere è probabilmente alle persone che ci lavorano; esattamente ciò che ho fatto !
Tl; dr: era originariamente presente prima di make
e &{}
, ed è ancora la funzione da utilizzare in alcune situazioni.
Fondamentalmente, ecco le parti più importanti citate:
So what's the reasoning behind new ? Is it something useful ? Should we
use it ?
Non puoi farlo senza nuovo
v := new(int)
*v++
fmt.Println(*v)
new isn't a headline feature of Go, you won't find it used often, but
when you need it, it is there.
Cheers
Dave
Dopo un'altra risposta che mostra questo tipo di soluzione:
vv := 0
v := &vv
*v++
fmt.Println(*v)
Ho chiesto ulteriori chiarimenti:
So basically, Dave's point doesn't really stand?
Ci sono luoghi in cui è scomodo inserirsi di nascosto in un nuovo
variabile solo per prendere il suo indirizzo.
new (T) ha un significato immediatamente immediato, piuttosto che
essere un idioma multi-passo.
Il punto di Dave cade solo se la mera possibilità tecnica (di fare senza
new
) è convincente da solo.
Wasn't this discussed because it was just obvious that Go should have it because almost every language has it?
Il "dovremmo mantenere new
?" la discussione si apre di tanto in tanto.
Dal momento che non possiamo portarlo fuori fino a Go 2, se comprendo correttamente la Promessa,
non sembra esserci molto da girare intorno al
loop di nuovo; nel momento in cui Go 2 è pensabile, potremmo averne alcuni
idee diverse e migliori ...
Chris
Ci sono anche per lo più per ragioni storiche:
you need to consider the history of the project. i think new is introduced
first before there is make.
Questo è vero. In effetti abbiamo faticato per un po 'prima di venire fuori
l'idea di fare. Se guardi i registri del repository puoi vederlo
make compare solo nel gennaio 2009, revisione 9a924177598f.
Anche la nuova funzione incorporata ha preceduto l'idea di & {} per prendere il
indirizzo di un letterale composito (e quella sintassi è in un certo senso
sbagliato; probabilmente dovrebbe essere (* T) {campi di T} ma non c'era
motivo sufficiente per cambiarlo).
La nuova funzione non è strettamente necessaria ma il codice sembra funzionare
in pratica. È difficile liberarsene a questo punto.
Ian