J'ai étudié un certain nombre de projets Go et il y a pas mal de variations. Vous pouvez en quelque sorte dire qui vient de C et qui vient de Java, car le premier vidage à peu près tout dans le répertoire racine des projets dans un mainpackage, et le dernier a tendance à tout mettre dans un srcrépertoire. Cependant, aucun n'est optimal. Chacun a des conséquences car il affecte les chemins d'importation et la manière dont les autres peuvent les réutiliser.
Pour obtenir les meilleurs résultats, j'ai élaboré l'approche suivante.
myproj/
main/
mypack.go
mypack.go
Où mypack.goest package mypacket main/mypack.goest (évidemment) package main.
Si vous avez besoin de fichiers de support supplémentaires, vous avez deux choix. Soit les conserver tous dans le répertoire racine, soit placer les fichiers de support privés dans un libsous - répertoire. Par exemple
myproj/
main/
mypack.go
myextras/
someextra.go
mypack.go
mysupport.go
Ou
myproj.org/
lib/
mysupport.go
myextras/
someextra.go
main/
mypack.go
mypage.go
Ne placez les fichiers dans un librépertoire que s'ils ne sont pas destinés à être importés par un autre projet. En d'autres termes, s'il s'agit de fichiers de support privés . C'est l'idée derrière avoir lib--pour séparer les interfaces publiques des interfaces privées.
Faire les choses de cette façon vous donnera un bon chemin d'importation, myproj.org/mypackpour réutiliser le code dans d'autres projets. Si vous utilisez libalors les fichiers de support internes auront un chemin d'importation qui indique que, myproj.org/lib/mysupport.
Lors de la construction du projet, utilisez main/mypack, par exemple go build main/mypack. Si vous avez plusieurs exécutables, vous pouvez également séparer ceux qui se trouvent sous mainsans avoir à créer des projets distincts. par exemple main/myfoo/myfoo.goet main/mybar/mybar.go.