2016-02-23 34 views
6

Mam krótki program w Go z następującymi częściami plików. Program struktura katalogów:Czy istnieje skuteczny sposób udostępniania struktury między pakietami golang?

myprogram/ 
    main.go 
    server.go 
    routines.go 
    structs.go 

Te różne pliki zawierają inną funkcję. Plik structs.go zawiera listę typu struktury zdefiniowaną i używaną w kilku plikach mojego programu. Co chcę zrobić, teraz jest podział mój program w pakiecie jak w poniższym przykładzie:

main/ 
    main.go // the main program 
server/ 
    server.go // a package imported in main 
routines/ 
    routines.go // a package imported in main 

Moim problemem jest to, że nie wiem gdzie umieścić structs.go ponieważ zawiera konstrukcje wykorzystywane w kilku pakietu, tak jak w kod "main.go".

Jak skutecznie udostępniać ten plik structs.go? Czy powinienem go dołączyć (za pośrednictwem dowiązania symbolicznego do pliku) do każdej z zdefiniowanych przeze mnie paczek, tj. server i routines, a także do głównej?

Moja metoda może być niezręczna, ponieważ jestem początkującym użytkownikiem Go i ogólnie programowaniem.

+0

Nie ma potrzeby rozdzielania rzeczy na własny pakiet. Zadaj sobie pytanie: Jakie rzeczywiste korzyści wynikają z tego podziału? A teraz porównajcie z kosztami. – Volker

+0

Celem jest ponowne wykorzystanie niektórych z tych pakietów w innych programach niż "główne". – ElieLie

Odpowiedz

6

Nie łącz plików między pakietami, to jest zła praktyka. Po pierwsze, kod zostanie zduplikowany. Po drugie, identyfikatory będą duplikowane w znaczeniu oznaczającym te same jednostki (na przykład typ lub funkcję), ale będą odrębne. Na przykład. jeśli połączony i structs.go będzie zawierał definicję type Response, będziesz miał 2 różne typy server.Response i routines.Response dając więcej zamieszania.

Jednym rozwiązaniem byłoby umieszczenie structs.go w osobnym pakiecie, np. model, a wszystkie inne pakiety, które go używają, mogą zaimportować go (np. Twoje main, server i routines).

W teoretycznej przykład jeśli pakiet A import pakiet B i structs.go byłoby potrzebne w obu, to mogą być również dodawane do pakietu B. Jeśli byłby pakiet C wymagający tylko structs.go, to znowu byłoby rozsądniej utworzyć własny pakiet model (więc pakiet C nie musi importować/wiedzieć o pakiecie B, tylko nowy pakiet model).

Również, jeśli nikt inny nie użyje twojej paczki i nie jest zbyt skomplikowana, może nie być warta ułożenia w wiele pakietów.

+0

Ok, więc polecam mi utworzyć pakiet struktur, np. "Model". Dziękuję za tę odpowiedź, mam nadzieję, że to dobra praktyka w Go. – ElieLie