it-swarm.com.de

Wie kann ich ein Projekt mit mehreren Dateien im Hauptpaket "ausführen"?

Ich habe derzeit eine einzelne Datei in meinem Hauptpaket mit dem Namen main.go. Wie teile ich den Inhalt von main.go in mehrere Dateien, ohne ein separates Paket zu erstellen, da der Code nicht wiederverwendbar ist.

Ich möchte eine Verzeichnisstruktur wie diese:

$ ls foo

main.go
bar.go

bar.go

package main

import "fmt"

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

Dann in main.go

package main

func main() {
    Bar()
}

Aber go run main.go gibt mir:

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

Update 26. Juli 2019

go run .

Ursprüngliche Antwort

Der obige Code funktioniert tatsächlich. Das Problem war, dass ich rennen musste

go run *.go

anstatt von

go run main.go
170
Neil

Update August 2018 mit Go 1.11 , a Abschnitt "Run" besagt:

Der Befehl go run erlaubt jetzt einen einzelnen Importpfad, einen Verzeichnisnamen oder ein Muster, das mit einem einzelnen Paket übereinstimmt.
Dies ermöglicht go run pkg Oder go run dir, Am wichtigsten go run .


Ursprüngliche Antwort Jan. 2015

Wie in " Wie kompiliere ich ein aus mehreren Dateien bestehendes Go-Programm? " erwähnt, erwartet go run eine Liste von Dateien, da es "das main Paket, das die benannten Go - Quelldateien enthält ".
So können Sie Ihr main - Paket mit go run Sicher in mehrere Dateien aufteilen.

Das unterscheidet sich von go build/go install , das Paketnamen erwartet (und keine Dateinamen).
Ein einfaches go build Würde eine ausführbare Datei erzeugen, die nach dem übergeordneten Ordner benannt ist.

Beachten Sie, dass als dargestellt durch diesen Thread ein go run *.go In einer Windows CMD-Sitzung nicht funktionieren würde, da Shell keine Platzhaltererweiterung vornimmt .

65
VonC

Wie bereits erwähnt, können Sie go run *.go aber für Windows können Sie einfach die Skriptdateien auflisten (da * .go nicht funktioniert) - go run main.go other.go third.go

4
Karl Penzhorn

Meiner Meinung nach ist die beste Antwort auf diese Frage in den Kommentaren zur obersten Antwort versteckt.

Führen Sie einfach Folgendes aus:

go run .

Dadurch werden alle Dateien im Hauptpaket ausgeführt, aber es wird nicht eine Fehlermeldung wie angezeigt

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

Ein großes Lob an @BarthesSimpson

0
chim

Wenn Sie versuchen, mit Gorilla Mux in Go mehrere Dateien auf localhost auszuführen, müssen Sie die neueste Version (1.11) verwenden. Versuchen Sie es mit einem der folgenden 2 Befehle.

  1. installieren Sie && FolderName -port 8081.

  2. erstellen Sie && ./FolderName -port 8081.

Stellen Sie sicher, dass Sie sich im Quellordner befinden, z. B. "go/src/FolderName", bevor Sie den Befehl im Terminal ausführen.

0
unknown

Installieren Sie unter Windows Cygwin und verwenden Sie es anstelle der Eingabeaufforderung. "go run * .go" funktioniert dann.

0
Alex Dvoretskiy