121 votes

Comment compiler un programme Go composé de plusieurs fichiers ?

J'ai un petit programme qui consiste en trois fichiers, tous appartenant au même paquet (main). Mais lorsque je fais go build main.go la construction n'aboutit pas. Lorsqu'il n'y avait qu'un seul fichier ( main.go ), tout a bien fonctionné.

Maintenant que j'ai fait l'effort de séparer le code, il semble que le compilateur soit incapable de trouver les éléments qui ont été retirés de main.go et les placer dans ces deux autres fichiers (qui se trouvent dans le même répertoire que le fichier main.go). Ce qui donne undefined 'type' erreurs.

Comment compiler ce programme composé de plusieurs fichiers ?

97voto

dystroy Points 145126

Nouvelle voie ( Recommandé ):

Veuillez consulter cette réponse .

Ancienne méthode :

Supposons que vous écriviez un programme appelé myprog :

Placez tous vos fichiers dans un répertoire comme celui-ci

myproject/go/src/myprog/xxx.go

Ajouter ensuite myproject/go à GOPATH

Et courir

go install myprog

De cette façon, vous pourrez ajouter d'autres paquets et programmes dans myproject/go/src si vous le souhaitez.

Référence : http://golang.org/doc/code.html

(ce document est toujours oublié par les nouveaux arrivants et souvent mal compris au début. Il devrait faire l'objet de la plus grande attention de la part de l'équipe Go.)

71voto

Kissaki Points 4000

Lorsque vous séparez le code de l main.go en par exemple more.go vous passez simplement ce fichier à go build / go run / go install également.

Ainsi, si vous avez précédemment exécuté

go build main.go

vous n'avez plus qu'à

go build main.go more.go

Pour plus d'informations :

go build --help

États :

Si les arguments sont une liste de fichiers .go, build les traite comme une liste de fichiers source spécifiant un seul paquet.


Notez que go build y go install diffèrent de go run en ce sens que les deux premiers déclarent s'attendre à noms des paquets en tant qu'arguments, tandis que le dernier s'attend à ce que aller aux fichiers . Cependant, les deux premiers acceptent également les fichiers go comme le fait go install.

Si vous vous posez la question : construire va juste build les paquets/fichiers, install produira des fichiers objets et binaires dans votre GOPATH, et run compilera et exécutera votre programme.

58voto

deeperx Points 144

Depuis Go 1.11+, GOPATH n'est plus recommandé, la nouvelle méthode consiste à utiliser les modules Go.

Supposons que vous écriviez un programme appelé simple :

  1. Créer un répertoire :

    mkdir simple
    cd simple
  2. Créer un nouveau module :

    go mod init github.com/username/simple
    # Here, the module name is: github.com/username/simple.
    # You're free to choose any module name.
    # It doesn't matter as long as it's unique.
    # It's better to be a URL: so it can be go-gettable.
  3. Placez tous vos fichiers dans ce répertoire.

  4. Enfin, courez :

    go run .
  5. Vous pouvez également créer un programme exécutable en le construisant :

    go build .
    
    # then:
    ./simple     # if you're on xnix
    
    # or, just:
    simple       # if you're on Windows

Pour plus d'informations, vous pouvez lire este .

Depuis la version 1.11, Go prend en charge les modules versionnés tels que proposés ici. Le prototype initial vgo a été annoncé en février 2018. En juillet 2018, les modules versionnés ont atterri dans le dépôt principal de Go. Dans Go 1.14, le support des modules est considéré comme prêt pour une utilisation en production, et tous les utilisateurs sont encouragés à migrer vers des modules à partir d'autres systèmes de gestion des dépendances.

34voto

poopoothegorilla Points 549

Vous pouvez également lancer

go build

dans le dossier de votre projet myproject/go/src/myprog

Il vous suffit ensuite de taper

./myprog

pour exécuter votre application

14voto

Cela dépend de la structure de votre projet. Mais la solution la plus simple est la suivante :

go build -o ./myproject ./...

puis exécuter ./myproject .

Supposons que la structure de votre projet soit la suivante

- hello
|- main.go

il suffit d'aller dans le répertoire du projet et d'exécuter

go build -o ./myproject

puis exécuter ./myproject sur la coquille.

ou

# most easiest; builds and run simultaneously
go run main.go

Supposons que votre fichier principal soit imbriqué dans un sous-répertoire comme un cmd

- hello
|- cmd
 |- main.go

vous exécuterez alors

go run cmd/main.go

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X