2017-07-24 81 views
5

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

8

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?