Structure des dossiers
Les projets Go sont composés depaquets. Nous appelonscommandesles packages qui ont lemain
identifiant.
Un projet peut avoir
1
paquetn
paquets1
commander1
commande et1
paquetn
commandes et1
paquet1
commande etn
paquetsn
commandes etn
paquets
Selon la nature de votre projet, vous devez organiser la structure des dossiers d'une certaine manière.
Quelques exemples du monde réel
Voyons quelques exemples concrets de cela dans la nature, ci-dessous. Je les ai pris deCinq suggestions pour mettre en place un projet Gopar Dave Cheney.
Exemple de projet avec1
paquet:
Exemple de projet avecn
paquets
Exemple de projet avec1
commander
https://github.com/tools/godep
Exemple de projet avec1
commande et1
paquet
https://github.com/monochromegane/the_platinum_searcher
Exemple de projet avecn
commandes etn
paquets
https://github.com/golang/tools
Conventions pour la structure de fichiers dans un projet
À partir de ces exemples, nous pouvons dire ces conventions:
Si vous avez une commande, elle peut vivre dans unmain.go
fichier à la racine du projet.
Avec plusieurs commandes, créez uncmd/
dossier, et sous celui-ci, créez un dossier avec le nom de la commande. Dans chaque dossier, idéalement un.go
le fichier avec le même nom contiendra lemain()
fonction, bien que ce ne soit pas obligatoire.
Les packages vont dans leur propre dossier, sauf si vous n'avez qu'un seul package.
Emplacement du système de fichiers pour les packages installés
Tout projet Go peut être installé en utilisantgo get
.go get
installera les packages sous$GOPATH/src
. Par exemple en tapant
go get github.com/kr/fs
va télécharger et installer le référentiel 1-package situé àhttps://github.com/kr/fs, et il le mettra sous$GOPATH/src/github.com/kr/fs
. Nous pouvons simplement le référencer dans nos programmes en utilisantimport github.com/kr/fs
.
Et si on tape
go get github.com/tools/godep
au lieu? N'oubliez pas qu'il s'agit du référentiel à commande unique que nous avons répertorié auparavant.
go get
va le télécharger comme il l'a fait pourgithub.com/kr/fs
, et mettez-le sous$GOPATH/src
, MAIS puisque c'est une commande, il compilera et créera également un$GOPATH/bin/godep
binaire.
Les commandes Go sont compilées avec le nom du dossier englobant, dans ce cas, le dossier était le dossier racine, donc c'estgodep
. Dans le cas de commandes multiples, il faudradernier sous-dossierNom. Par exemple, un idéalgithub.com/flaviocopes/tools/cmd/unzip
serait compilé enunzip
. Cela faitne pasprenez le nom du fichier contenant lemain()
fonction.
Espaces de travail
Go a un concept tout à fait unique deespace de travail. Un espace de travail est la structure de dossiers qui$GOPATH
pointe vers. Lorsque vous créez un nouvel espace de travail, ajoutez le$GOPATH/bin
dossier sur votre chemin. Par exemple, si vous souhaitez définir votre espace de travail sur~/go
(qui d'ailleurs est la valeur par défaut):
export GOPATH=~/go
export PATH=~/go/bin:$PATH
Désormais, tout code Go que vous exécutez fera référence à ce dossier. Cela vous permet de créer des espaces de travail séparés, bien que comme indiquédans la documentation officielle,
Les programmeurs Go conservent généralement tout leur code Go dans un seul espace de travail.
Notez que cela diffère des autres environnements de programmation dans lesquels chaque projet a un espace de travail séparé et les espaces de travail sont étroitement liés aux référentiels de contrôle de version.
Voici un exemple d'espace de travail, répertorié dans la documentation officielle:
bin/
hello # command executable
outyet # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package object
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
#... (many more repositories and packages omitted) ...
Sachant cela, voyons voir ...
Où placer vos commandes et packages
Lors de l'exécution de commandes à l'aide dego run
, vous pouvez avoir votre projet où vous le souhaitez, mais cette approche n'est utile que pour des tests rapides.
Vous devez créer vos programmes dans le$GOPATH/src
dossier, avec votre espace de noms unique, par exemple
$GOPATH/src/github.com/flaviocopes/hello
Lors de l'exécution (de n'importe où dans le système)
go install github.com/flaviocopes/hello
Go compilera et placera lehello
binaire en$GOPATH/bin
, prêt à être exécuté de n'importe où dans le système.
Il en va de même pour les colis,saufque lors de l'exécutiongo install
, il mettra le paquet compilé sous$GOPATH/pkg
.
Référence
- https://golang.org/doc/code.html#Organization
- https://dave.cheney.net/2014/12/01/five-suggestions-for-setting-up-a-go-project
- https://skife.org/golang/2013/03/24/go_dev_env.html
- https://stackoverflow.com/questions/14867452/what-is-a-sensible-way-to-layout-a-go-project
- https://medium.com/@benbjohnson/structuring-applications-in-go-3b04be4ff091
Plus de tutoriels go:
- Utilisation du proxy inverse NGINX pour servir les services Go
- Faire une copie d'une structure dans Go
- Les bases d'un serveur Web Go
- Trier un type de carte dans Go
- Allez les pointeurs en un mot
- Go Tags expliqué
- Aller au formatage de la date et de l'heure
- Traitement JSON avec Go
- Fonctions Go Variadic
- Fiche de triche Go Strings
- L'interface Go Empty expliquée
- Débogage Go avec VS Code et Delve
- Named Go renvoie des paramètres
- Générer des nombres et des chaînes aléatoires dans Go
- Structure du système de fichiers d'un projet Go
- Algorithme de recherche binaire implémenté dans Go
- Utilisation des indicateurs de ligne de commande dans Go
- GOPATH a expliqué
- Créez une application de ligne de commande avec Go: lolcat
- Création d'une commande CLI avec Go: cowsay
- Utilisation de Shell Pipes avec Go
- Tutoriel Go CLI: Clone de fortune
- Lister les fichiers dans un dossier avec Go
- Utilisez Go pour obtenir une liste des référentiels à partir de GitHub
- Allez, ajoutez une tranche de chaînes à un fichier
- Allez, convertissez une chaîne en une tranche d'octets
- Visualisez vos contributions Git locales avec Go
- Premiers pas avec Go CPU et profilage de la mémoire
- Résolution de l'erreur "ne prend pas en charge l'indexation" dans un programme Go
- Mesure du temps d'exécution dans un programme Go
- Création d'un robot d'exploration Web avec Go pour détecter les titres en double
- Go Best Practices: pointeur ou récepteurs de valeur?
- Go Best Practices: Devez-vous utiliser une méthode ou une fonction?
- Go Structures de données: définir
- Aide-mémoire Go Maps
- Générer des implémentations pour les types génériques dans Go
- Go Data Structures: Dictionnaire
- Structures de données Go: table de hachage
- Implémenter des écouteurs d'événements dans Passer par les canaux
- Go Structures de données: pile
- Go Structures de données: file d'attente
- Go Structures de données: arbre de recherche binaire
- Go Structures de données: graphique
- Structures de données Go: liste liée
- Le guide complet des structures de données Go
- Comparaison des valeurs Go
- Est-ce que Go est orienté objet?
- Travailler avec une base de données SQL dans Go
- Utilisation des variables d'environnement dans Go
- Tutoriel Go: API REST soutenue par PostgreSQL
- Activation de CORS sur un serveur Web Go
- Déployer une application Go dans un conteneur Docker
- Pourquoi Go est un langage puissant à apprendre en tant que développeur PHP
- Allez, supprimez le caractère de nouvelle ligne io.Reader.ReadString
- Allez, comment observer les changements et reconstruire votre programme
- Allez, comptez les mois depuis une date
- Accéder aux paramètres HTTP POST dans Go