2015-10-27 10 views
5

Weźmy na przykład go github package. Prawie każdy element każdej zdefiniowanej struktury jest wskaźnikiem do wartości, a nie wartości.Czy często członkowie struktury są wskaźnikami w Golang?

Czy to idiomatyczne Go? Czemu?

Rozumiem, że zmniejsza on rozmiar struktury (zakładając, że rozmiar wskaźnika jest mniejszy niż rozmiar wartości, na którą wskazuje), co może mieć znaczenie, jeśli często przekazujesz strukturę wokół wartości. Ale dlaczego nie mieć struktury wartości i przekazać strukturę przez wskaźnik?

Odpowiedz

8

W pakiecie github powodem jest to, że większość struktur ma być serializowana/deserialized z json z interfejsu API github.

Powodem używają *int zamiast int dlatego wartość zero wskaźnik jest nil, natomiast wartość zero int jest 0. Pozwala to klientowi na odróżnienie "tego pola nie było zawarte w odpowiedzi", a "wartość tego pola wynosi zero".

Jest to szczególnie przydatne w takich sytuacjach jak czas, w którym, jeśli nie masz typów nilable, otrzymasz wiele dat typu 00-00-0000.

Powiązane problemy