Wiem, że golang pozwala na wiele init w jednym pakiecie, a nawet w jednym pliku. Zastanawiam się, dlaczego? Na przykład, jeśli pkg ma wiele plików, moglibyśmy napisać wiele init, a następnie moglibyśmy zgubić się w miejscu, w którym powinniśmy wstawić init, a my moglibyśmy być również zdezorientowani co do kolejności init, jeśli mamy wiele init w jednym pkg. (Mam na myśli, czy to jest lepsze? Możemy mieć tylko 1 init, możemy mieć trochę initXXX, następnie wstawić je do init, wydaje się całkiem czyste.) Jaka jest korzyść z robienia tego w widoku struktury kodu?Jaki jest cel golanga, który umożliwia wielokrotne uruchamianie w jednym pakiecie?
Odpowiedz
To pytanie może być w pewnym stopniu oparte na opiniach, ale korzystanie z wielu funkcji pakietu init()
może ułatwić czytanie i obsługę kodu.
Jeśli twoje pliki źródłowe są duże, zazwyczaj uporządkujesz ich zawartość (np. Typy, deklaracje zmiennych, metody itd.) W logicznej kolejności. Dodatek wielu funkcji init()
daje możliwość umieszczenia kodu inicjalizacyjnego w pobliżu części, które powinny zostać zainicjowane. Gdyby nie było to dozwolone, musiałbyś użyć jednej funkcji w jednym pakiecie i umieścić wszystko w niej, daleko od zmiennych, które są potrzebne do zainicjowania.
Tak, posiadanie wielu funkcji init()
może wymagać pewnej ostrożności w odniesieniu do kolejności wykonania, ale wiem, że używanie wielu funkcji init()
nie jest wymogiem, to tylko możliwość. Możesz także napisać funkcje, które nie mają efektów "bocznych", aby nie polegać na wypełnianiu innych funkcji init()
.
Jeśli jest to nieuniknione, można utworzyć jeden "główny" init()
, który wyraźnie kontroluje kolejność innych funkcji "potomnych" init()
.
Odnośna sekcja ze specyfikacji: Package initialization.
Zobacz także powiązane pytanie: What does lexical file name order mean?
- 1. Jaki jest cel vertexAttribPointer?
- 2. Umożliwia obrót/krajobraz w jednym fragmencie
- 3. Jaki jest cel IApplicationBuilder.New()
- 4. Jaki jest cel curdoc()?
- 5. Jaki jest cel aclocal?
- 6. Jaki jest cel XNoImplicitPrelude?
- 7. Jaki jest cel Ember.Container
- 8. Jaki jest cel $ w XSLT
- 9. Jaki jest cel ldexp?
- 10. Jaki jest cel Rake?
- 11. Jaki jest cel HttpHeaders.TryAddWithoutValidation?
- 12. Jaki jest cel Mage_Core_Block_Template_Facade
- 13. Jaki jest cel CMakeScripts?
- 14. Jaki jest cel preompompiledApp.config?
- 15. Jaki jest cel "() =>"
- 16. Jaki jest cel używania?
- 17. Jaki jest cel JNDI
- 18. Jaki jest cel IAsyncStateMachine.SetStateMachine?
- 19. Jaki jest cel layout.xml?
- 20. Uruchamianie aplikacji na innym pakiecie SDK w systemie OS X?
- 21. Jaki jest cel javax StreamSource
- 22. Jaki jest cel klasy Expression?
- 23. Jaki jest cel typu jednostki w Rust?
- 24. System uwierzytelniania CodeIgniter, który umożliwia uwierzytelnianie trzeciej strony?
- 25. Jaki jest cel metody Objects.compare()?
- 26. Uruchamianie zdalnej aplikacji GUI w pakiecie Powershell
- 27. Jaki jest cel Array.GetLowerBound (int)?
- 28. Jaki jest cel Active Records?
- 29. Jaki jest cel przejścia niezdefiniowanego?
- 30. Jaki jest cel pola ValidationResult.Success?