Nadal jestem zaskoczony, dlaczego mamy new
Go.
Jeśli chcesz utworzyć instancję struktury, robisz to
t := Thing{}
i możesz uzyskać wskaźnik do nowej instancji, wykonując
t := &Thing{}
Ale jest też taka możliwość:
t := new(Thing)
Ten ostatni wydaje się trochę obcy dla reszty języka. &Thing{}
jest tak jasny i zwięzły jak new(Thing)
i wykorzystuje tylko konstrukcje, których często używasz w innym miejscu. Jest również bardziej rozszerzalny, ponieważ możesz go zmienić na &Thing{3}
lub &Thing{Feets:7}
.
Moim zdaniem posiadanie dodatkowego słowa kluczowego 1 jest kosztowne, czyni język bardziej złożonym i dodaje do tego, co musisz wiedzieć. I może maskować początkujących, co kryje się za tworzeniem struktury.
To także tworzy jedno zastrzeżone słowo.
Więc jakie jest uzasadnienie new
? Czy to czasem jest przydatne? Czy powinniśmy tego użyć?
1 : Tak, wiem, że to nie jest słowo kluczowe na poziomie gramatycznym, możesz je ukryć , ale to nie zmienia faktu, że jest to dla rozsądnego programisty słowo zastrzeżone.
Odpowiedzi:
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:
Po kolejnej odpowiedzi pokazującej tego rodzaju rozwiązanie:
Poprosiłem o dalsze wyjaśnienia:
Jest tam również głównie z powodów historycznych:
źródło
v := &(0)
i pomijaniem zmiennej temp? (Nie znam Go.)0
jest to dosłowna stała, nie możesz wziąć jej adresu. Wystąpiłby problem, gdybyś chciał również określonego typu. Dlatego składnia podobna&int
lub&int(0)
może być przydatna (choć nie myślałem dużo o najlepszej składni). Ale robienie tego w dwóch wierszach, jak pokazał Collins, również jest w porządku (vv := 0; v := &vv
).Go 2
jest uważane za szkodliwe.