Najlepszym sposobem, aby zapytać, są prawdopodobnie ludzie pracujący nad tym; dokładnie to, co zrobiłem !
Tl; dr: pierwotnie był tam make
i &{}
nadal jest funkcją do użycia w niektórych sytuacjach.
Zasadniczo oto najważniejsze cytowane części:
Więc jakie jest uzasadnienie nowego? Czy to coś przydatnego? Czy powinniśmy tego użyć?
Nie możesz tego zrobić bez nowego
v := new(int)
*v++
fmt.Println(*v)
nowa nie jest główną funkcją Go, nie znajdziesz jej często używanej, ale kiedy jej potrzebujesz, jest dostępna.
Twoje zdrowie
Dave
Po kolejnej odpowiedzi pokazującej tego rodzaju rozwiązanie:
vv := 0
v := &vv
*v++
fmt.Println(*v)
Poprosiłem o dalsze wyjaśnienia:
Więc w gruncie rzeczy punkt Dave'a tak naprawdę nie ma racji?
Są miejsca, w których niewygodne jest wkradanie się do nowej zmiennej po prostu po jej adres.
new (T) ma bezpośrednie znaczenie, a nie jest idiomem złożonym z wielu kroków.
Punkt Dave'a spada tylko wtedy, gdy sama techniczna możliwość (obejście się bez new
) jest sama w sobie
przekonująca.
Czy nie zostało to omówione, ponieważ było po prostu oczywiste, że Go powinien to mieć, ponieważ ma go prawie każdy język?
„Czy powinniśmy zachować new
?” od czasu do czasu pojawia się dyskusja. Ponieważ nie możemy tego zrobić, dopóki Go 2, jeśli dobrze zrozumiem obietnicę, wydaje się, że nie ma wiele do zrobienia po ponownym obejściu pętli; do czasu, gdy Go 2 da się wymyślić, możemy mieć inne, lepsze pomysły ...
Chris
Jest tam również głównie z powodów historycznych:
musisz wziąć pod uwagę historię projektu. myślę, że nowy jest wprowadzany jako pierwszy, zanim powstanie.
To prawda. W rzeczywistości zmagaliśmy się przez chwilę, zanim wpadliśmy na pomysł zrobienia. Jeśli spojrzysz na dzienniki repozytorium, zobaczysz, że make pojawia się tylko w styczniu 2009 roku, wersja 9a924177598f.
Nowa wbudowana funkcja poprzedza także ideę & {} przyjmowania adresu złożonego literału (i ta składnia jest w pewnym sensie niepoprawna; prawdopodobnie powinna to być (* T) {pola T}, ale nie było wystarczająco dużo powód, aby to zmienić).
Nowa funkcja nie jest absolutnie konieczna, ale wydaje się, że kod używa jej w praktyce. W tym momencie trudno się go pozbyć.
Ian