Я вивчив цілу низку проектів 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.