web-dev-qa-db-fra.com

Comment puis-je "exécuter" un projet avec plusieurs fichiers dans le package principal?

J'ai actuellement un seul fichier dans mon paquet principal appelé main.go. Comment diviser le contenu de main.go en plusieurs fichiers sans créer de package séparé, car le code n'est pas réutilisable.

Je veux une structure de répertoire comme celle-ci:

$ ls foo

main.go
bar.go

bar.go

package main

import "fmt"

func Bar() {
    fmt.Println("Bar")
}

Puis dans main.go

package main

func main() {
    Bar()
}

Mais go run main.go me donne:

# command-line-arguments
./main.go:4:2: undefined: Bar
122
Neil

Mise à jour du 26 juillet 2019

go run .

Réponse originale

Le code ci-dessus fonctionne réellement. Le problème était que j'avais besoin de courir

go run *.go

au lieu de

go run main.go
170
Neil

Mise à jour août 2018, avec Go 1.11 , un section "Exécuter" indique:

La commande go run autorise désormais un seul chemin d'importation, un nom de répertoire ou un modèle correspondant à un seul package.
Ceci permet à _go run pkg_ ou _go run dir_, plus important encore _go run ._


Réponse originale janvier 2015

Comme mentionné dans " Comment compiler le programme Go composé de plusieurs fichiers? ", go run attend une liste de fichiers, car il "compile et exécute le fichier main paquetage contenant les fichiers sources nommés Go ".
Vous pouvez donc certainement diviser votre paquet main en plusieurs fichiers avec _go run_.

Cela diffère de go build/go install qui attend les noms de paquetages (et non les noms de fichiers).
Un simple _go build_ produirait un exécutable nommé d'après le dossier parent.

Notez que, comme illustré par ce fil , un _go run *.go_ ne fonctionnerait pas dans une session Windows CMD, car le shell ne fait pas de développement générique .

65
VonC

Comme mentionné, vous pouvez dire go run *.go, mais pour Windows, vous pouvez simplement lister les fichiers de script (car * .go ne fonctionnera pas) - go run main.go other.go third.go

4
Karl Penzhorn

À mon avis, la meilleure réponse à cette question est cachée dans les commentaires en tête de la réponse.

Il suffit de lancer ceci:

go run .

Ceci exécutera tous les fichiers du paquet principal, mais pas donnera un message d'erreur comme

go run: cannot run *_test.go files (main_test.go)

Félicitations à @BarthesSimpson

0
chim

Si vous essayez d'exécuter plusieurs fichiers sur localhost à l'aide de gorilla mux, accédez à la dernière version (1.11). Essayez d’utiliser l’une des 2 commandes suivantes.

  1. allez installer && FolderName -port 8081.

  2. allez construire && ./FolderName -port 8081.

Assurez-vous que vous êtes dans le dossier source c'est-à-dire allez/src/FolderName avant d'exécuter la commande dans le Terminal.

0
unknown

Pour Windows, installez Cygwin et utilisez-le à la place de la commande Invite. "go run * .go" fonctionnera alors.

0
Alex Dvoretskiy