Я вивчив цілу низку проектів Go, і тут досить багато варіацій. Ви можете начебто сказати, хто походить з C, а хто приходить з Java, оскільки колишній демпфірує майже все, що знаходиться в кореневому каталозі проектів в main
пакеті, а останні, як правило, містять все в src
каталозі. Однак це не є оптимальним. Кожен з них має наслідки, оскільки вони впливають на шляхи імпорту та як інші можуть їх повторно використовувати.
Для отримання найкращих результатів я виробив наступний підхід.
myproj/
main/
mypack.go
mypack.go
Де mypack.go
є package mypack
і main/mypack.go
є (очевидно) package main
.
Якщо вам потрібні додаткові файли підтримки, у вас є два варіанти. Або збережіть їх усіх у кореневому каталозі, або покладіть приватні файли підтримки у lib
підкаталог. Напр
myproj/
main/
mypack.go
myextras/
someextra.go
mypack.go
mysupport.go
Або
myproj.org/
lib/
mysupport.go
myextras/
someextra.go
main/
mypack.go
mypage.go
Покладіть файли в lib
каталог лише в тому випадку, якщо вони не призначені для імпортування іншим проектом. Іншими словами, якщо це приватні файли підтримки. У цьому полягає ідея lib
- відокремити публічний від приватного інтерфейсу.
Якщо зробити це таким чином, ви отримаєте хороший шлях імпорту, myproj.org/mypack
щоб повторно використовувати код в інших проектах. Якщо ви використовуєте lib
то внутрішні файли підтримки матимуть шлях імпорту , який свідчить про те, що myproj.org/lib/mysupport
.
При побудові проекту використовуйте main/mypack
, напр go build main/mypack
. Якщо у вас є декілька виконуваних файлів, ви також можете відокремити ті, що не знаходяться main
без створення окремих проектів. наприклад main/myfoo/myfoo.go
і main/mybar/mybar.go
.