webentwicklung-frage-antwort-db.com.de

Wie kompiliere ich ein Go-Programm, das aus mehreren Dateien besteht?

Ich habe also ein kleines Programm, das aus drei Dateien besteht, die alle zum selben Paket gehören (main), aber wenn ich "go build main.go" mache, ist der Build nicht erfolgreich. Als es nur eine Datei (main.go) war, funktionierte alles gut. Nun, da ich mich bemühte, den Code zu trennen, sieht es so aus, als könnte der Compiler das Material, das aus main.go entnommen wurde, nicht finden und in diese beiden anderen Dateien einfügen (die sich in demselben Verzeichnis befinden wie das main.go). . Welche führt zu "undefined 'type'" Fehlern.

Ich habe etwas über das Setzen der GOPATH-Variable gelesen, also habe ich es versucht

set GOPATH=%cd%
go build main.go

aber auch das hat nicht funktioniert.

Jede Hilfe wird geschätzt.

62
Vitaly

Angenommen, Sie schreiben ein Programm namens myprog:

Legen Sie alle Ihre Dateien in einem solchen Verzeichnis ab

myproject/go/src/myprog/xxx.go

Fügen Sie dann myproject/go zu GOPATH hinzu

Und Renn 

go install myprog

Auf diese Weise können Sie weitere Pakete und Programme in myproject/go/src hinzufügen, wenn Sie möchten.

Referenz: http://golang.org/doc/code.html

(Dieses Dokument wird von Neuankömmlingen immer vermisst und anfangs oft nicht verstanden. Es sollte die größte Aufmerksamkeit des Go-Teams IMO erhalten.)

67
Denys Séguret

Wenn Sie den Code von main.go in beispielsweise more.go trennen, übergeben Sie diese Datei auch einfach an go build/go run/go install.

Also wenn du vorher gelaufen bist

go build main.go

du jetzt einfach

go build main.go more.go

Als weitere Information:

go build --help

zustände:

If the arguments are a list of .go files, build treats them as a list
of source files specifying a single package.

Beachten Sie, dass sich go build und go install von go run dahingehend unterscheiden, dass die ersten beiden Argumentepaketnamen als Argumente erwarten, während letztere go-Dateien erwartet. Die ersten beiden akzeptieren jedoch auch go-Dateien, wie dies bei go install der Fall ist.

Wenn Sie sich fragen: Build wird nur build die Pakete/Dateien erstellen, install erzeugt Objekt- und Binärdateien in Ihrem GOPATH und run wird Ihr Programm kompilieren und ausführen.

58
Kissaki

Sie könnten auch einfach laufen 

go build

in Ihrem Projektordner myproject/go/src/myprog

Dann kannst du einfach tippen

./myprog

um Ihre App auszuführen

24

Jep! Das ist sehr einfach und hier kommt die Paketstrategie ins Spiel. Meines Wissens gibt es drei Möglichkeiten. Ordnerstruktur:

GOPATH/src/github.com/abc/myproject/adapter/main.go pkg1 pkg2 Warnung: Der Adapter kann nur das Paket main und Sun-Verzeichnisse enthalten

  1. navigieren Sie zum Ordner "Adapter". Lauf:
    go build main.go
  1. navigieren Sie zum Ordner "Adapter". Lauf:
    go build main.go
  1. navigiere zu GOPATH/src erkenne relativen Pfad zum Paket main, hier "myproject/adapter". Lauf:
    go build myproject/adapter

Die exe-Datei wird in dem Verzeichnis erstellt, in dem Sie sich gerade befinden.

0
Sayan Dey

Das hängt von Ihrer Projektstruktur ab. Am einfachsten ist jedoch:

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

führen Sie dann ./myproject aus.

Angenommen, Ihre Projektstruktur sieht so aus

- hello
|- main.go

dann gehen Sie einfach in das Projektverzeichnis und führen es aus

go build -o ./myproject

führen Sie dann ./myproject auf der Shell aus.

oder 

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

angenommen, Ihre Hauptdatei ist in einem Unterverzeichnis wie cmd verschachtelt.

- hello
|- cmd
 |- main.go

dann wirst du laufen 

go run cmd/main.go
0

Sie können verwenden

go build *.go 
go run *.go

beides klappt auch du darfst benutzen

go build .
go run .
0
Tushar Saha