Jestem nowy Go
a także nowy pojęciu reflection
, ale powinny i może wykorzystanie reflect pakietu należy unikać w Go
? Czy istnieje scenariusz, w którym reflect
jest nieunikniony?Czy należy unikać używania odbicia w programie Go?
Odpowiedz
Istnieje kilka problemów domen gdzie odbicie sprawia, że łatwiej napisać wielokrotnego użytku biblioteki:
- rozrządowej/unmarshalling, mnóstwo przykładów w bibliotece standardowej, na przykład Formatowanie, np.
encoding/json
,encoding/xml
text/template
,html/template
,fmt.Printf
.
Jednak nie jest cena, jaką płacisz za pomocą refleksji: błędy czasowe
- kompilacji stać błędy runtime (np
fmt.Printf("%d", stringVariable)
) - wydajność pogarsza
Bardzo często alternatywne rozwiązanie istnieje, że nie wymagają refleksji, takiej jak generowanie kodu, która jest używana przez biblioteki rozrządowe, takie jak protobuf czy oszczędzanie.
Zgadzam się z @volker, że należy używać refleksji tylko wtedy, gdy wiadomo, że uprości on już istniejący kod i będzie świadomy wszystkich wad.
Powinieneś unikać refleksji.
Niektóre pakiety (na przykład fmt) nie mogą być zaimplementowane bez refleksji, ponieważ nie można przełączać typów we wszystkich istniejących i nadchodzących typach.
Jeśli jesteś nowy w Go: Trzymaj się z dala od odbicia.
Rozumiem, dziękuję za Wasze opinie, bardzo docenione! – linirod
- 1. Kiedy należy unikać używania `seq` w Clojure?
- 2. Kiedy należy unikać używania funkcji ładowania w systemie NHibernate?
- 3. Przedmioty RX - czy należy ich unikać?
- 4. Należy unikać zależności kołowej
- 5. Czy należy unikać przepychania między dwoma widokami?
- 6. Dlaczego należy unikać Runtime.exec() w java?
- 7. Czy należy unikać zagnieżdżonych instrukcji if w Perlu?
- 8. Czy należy unikać typów zagnieżdżonych w typach ogólnych?
- 9. Skąd pomysł na "dziedzictwo, którego należy unikać"?
- 10. Czy nienazwane argumenty są w programie Go?
- 11. deepcopy i python - wskazówki, których należy unikać?
- 12. Kontrola WPF - czy za wszelką cenę należy unikać kodowania?
- 13. Dlaczego powinienem unikać używania ClassType w kodzie aplikacji?
- 14. Dlaczego powinniśmy unikać używania ratunku w jego formie modyfikatora?
- 15. Czy isnan w std :: namespace? Bardziej ogólnie, kiedy jest std :: konieczny, opcjonalny lub którego należy unikać?
- 16. Czy nazwa_użytkownikaNameAttribute używa odbicia
- 17. Dlaczego użytkownicy cocos2d-iphone powinni unikać używania rozszerzenia @ 2x?
- 18. C# ReaderWriterLockSlim Najlepsze praktyki, których należy unikać Rekursja
- 19. Czy należy unikać wielu instrukcji if, takich jak "if (warunek) if (warunek) ..." w Javie?
- 20. Jak wdrożyć wzór strategii w programie Go?
- 21. Dlaczego zaleca się unikać .innerHTML?
- 22. Jaki plik nagłówkowy należy dołączyć do używania nullptr w g ++?
- 23. Unikać nowalinia w qDebug()
- 24. Kątomierz, kiedy należy go użyć() po kliknięciu()
- 25. Kiedy należy używać kontrolera UIViewController w programie IOS?
- 26. Unikać nakładania etykiet w Gephi
- 27. your.package.namespace - do czego należy go zmienić?
- 28. Czy w nazwach kolumn należy używać podkreśleń?
- 29. Czy należy odwrócić tekstury OpenGL?
- 30. Czy powinienem unikać magicznych ciągów, jak to tylko możliwe?
Dzięki za opinie kostya :) – linirod