Les nouveaux programmeurs Go ne savent souvent pas ou sont confus ce que fait la commande fondamentale go build.
Que exactement go build
et les go install
commandes construisent et où vont-ils mettre le résultat / sortie?
go
build
compilation
icza
la source
la source
Réponses:
Ce que fait la
go
commande dépend de si nous l'exécutons pour un package "normal" ou pour le"main"
package spécial .Pour les packages
go build
crée votre package puis rejette les résultats .go install
builds installe ensuite le package dans votre$GOPATH/pkg
répertoire.Pour les commandes (package
main
)go build
construit la commande et laisse le résultat dans le répertoire de travail actuel .go install
construit la commande dans un répertoire temporaire puis la déplace vers$GOPATH/bin
.À quoi passer
go build
?Vous pouvez transmettre des packages aux
go build
packages que vous souhaitez construire. Vous pouvez également transmettre une liste de.go
fichiers à partir d'un seul répertoire, qui est ensuite traitée comme la liste des fichiers source spécifiant un seul package.Si aucun package (chemins d'importation) n'est fourni, la construction est appliquée sur le répertoire courant.
Un chemin d'importation peut contenir un ou plusieurs
"..."
caractères génériques (auquel cas il s'agit d'un modèle )....
peut correspondre à n'importe quelle chaîne, par exemplenet/...
correspond aunet
package et les packages se trouvant dans l'un de ses sous-dossiers. La commandesouvent utilisé pour créer le package dans le dossier actuel et tous les packages récursifs. Cette commande émise dans une racine de projet crée le projet complet.
Pour en savoir plus sur la spécification des packages, exécutez
go help packages
.Concernant les modules
La prise en charge préliminaire des modules Go a été introduite dans Go 1.11, et les modules sont devenus par défaut à partir de Go 1.13. Lorsque l'
go
outil est exécuté à partir d'un dossier contenant ungo.mod
fichier (ou l'un des parents du dossier actuel), l'go
outil s'exécute en mode module-aware (le mode hérité est appelé mode GOPATH ).Lors de la construction de modules, ce qui est construit est spécifié par la liste de construction . La liste de construction ne contient initialement que le module principal (le module contenant le répertoire dans lequel la
go
commande est exécutée), et les dépendances du module principal sont ajoutées à la liste de construction, de manière récursive (des dépendances de dépendances sont également ajoutées).Pour plus d'informations, exécutez
go help modules
.Fondamentalement, vous pouvez utiliser
go build
pour vérifier que les packages peuvent être construits (avec leurs dépendances) tout engo install
installant (définitivement) les résultats dans les dossiers appropriés de votre$GOPATH
.go build
se terminera silencieusement si tout va bien et vous donnera des messages d'erreur si les paquets ne peuvent pas être compilés / compilés.Chaque fois que l'
go
outil installe un package ou un binaire, il installe également toutes les dépendances dont il dispose, donc l'exécutiongo install
installera également les packages dont dépend votre programme (packages "go gettable" disponibles publiquement), automatiquement.Pour commencer, lisez la page officielle Comment écrire le code Go .
Plus d'informations sur l'
go
outil: Command goVous pouvez également obtenir plus d'aide en exécutant la commande suivante:
Il est également intéressant de noter que démarrer avec Go 1.5
go install
supprime également les exécutables créés pargo build
( source ):Pour compléter la liste,
go run
compile votre application dans un dossier temporaire et démarre ce binaire exécutable. Lorsque l'application se ferme, elle nettoie correctement les fichiers temporaires.Question inspirée par Dave Cheney de What does go build build?
la source
Pour le paquet:
Ce ne sera plus le cas après Go 1.10 (Q1 2018), grâce aux CL 68116 et CL 75473 . Voir ce fil , que je référence ici.
En fait ...
go install
changera également avec Go 1.10, en plus du nouveau cache:la source
go build
- ce que , est-ce queget
s? J'ai une erreur de constructioncannot find package "github.com/spf13/cobra" in any of:…
. Je ne sais pas comment le dire pour l'obtenir. Dois-je obtenir explicitement?go.mod
fichier?go version go1.11.4 linux/amd64
. Je ne sais pas pour go.mod. Je suis en train de reconstruirehttps://github.com/cbroglie/mustache/blob/master/cmd/mustache/main.go
, c'est étrange car je viens de construire le paquet entier, et j'utilise cet exemple comme base, et j'ai créé une version plus basique qui a fonctionné (mais n'utilise pas cette bibliothèque). Je ne vois pas comment il n'a pas été installé avec le package moustache.