New Go-Programmierer wissen oft nicht oder sind nicht verwirrt, was der grundlegende Befehl go build bewirkt.
Was genau go build
und go install
Befehle bauen und wo setzen sie das Ergebnis / Output?
go
build
compilation
icza
quelle
quelle
Antworten:
Was der
go
Befehl tut, hängt davon ab, ob wir ihn für ein "normales" Paket oder für das spezielle"main"
Paket ausführen .Für Pakete
go build
erstellt Ihr Paket und verwirft dann die Ergebnisse .go install
Builds installiert dann das Paket in Ihrem$GOPATH/pkg
Verzeichnis.Für Befehle (Paket
main
)go build
Erstellt den Befehl und belässt das Ergebnis im aktuellen Arbeitsverzeichnis .go install
Erstellt den Befehl in einem temporären Verzeichnis und verschiebt ihn dann in$GOPATH/bin
.Was soll ich weitergeben
go build
?Sie können Pakete an
go build
Pakete übergeben, die Sie erstellen möchten. Sie können auch eine Liste von.go
Dateien aus einem einzelnen Verzeichnis übergeben, die dann als Liste der Quelldateien behandelt wird, die ein einzelnes Paket angeben.Wenn keine Pakete (Importpfade) angegeben sind, wird der Build auf das aktuelle Verzeichnis angewendet.
Ein Importpfad kann einen oder mehrere
"..."
Platzhalter enthalten (in diesem Fall handelt es sich um ein Muster )....
kann mit jeder Zeichenfolge übereinstimmen, z. B.net/...
mit demnet
Paket und den Paketen in einem seiner Unterordner. Der BefehlWird häufig verwendet, um das Paket im aktuellen Ordner zu erstellen, und alle Pakete werden erneut ausgeführt. Dieser in einem Projektstamm ausgegebene Befehl erstellt das gesamte Projekt.
Weitere Informationen zum Festlegen von Paketen finden Sie unter
go help packages
.In Bezug auf Module
Die vorläufige Unterstützung für Go-Module wurde in Go 1.11 eingeführt, und Module wurden ab Go 1.13 zum Standard. Wenn das
go
Werkzeug aus einem Ordner ausgeführt wird , die eine enthältgo.mod
Datei (oder einer der Eltern des aktuellen Ordners), dasgo
Werkzeug läuft in Modul-aware - Modus (wird der Legacy - Modus genannt GOPATH Modus ).Beim Erstellen von Modulen wird in der Erstellungsliste angegeben, was erstellt wird . Die Erstellungsliste enthält anfänglich nur das Hauptmodul (das Modul, das das Verzeichnis enthält, in dem der
go
Befehl ausgeführt wird), und die Abhängigkeiten des Hauptmoduls werden rekursiv zur Erstellungsliste hinzugefügt (Abhängigkeiten von Abhängigkeiten werden ebenfalls hinzugefügt).Weitere Informationen erhalten Sie unter
go help modules
.Grundsätzlich können Sie
go build
überprüfen, ob die Pakete (zusammen mit ihren Abhängigkeiten) erstellt werden können, während Siego install
die Ergebnisse auch (dauerhaft) in den richtigen Ordnern von Ihnen installieren$GOPATH
.go build
wird stillschweigend beendet, wenn alles in Ordnung ist, und gibt Ihnen Fehlermeldungen, wenn die Pakete nicht erstellt / kompiliert werden können.Wenn das
go
Tool ein Paket oder eine Binärdatei installiert, werden auch alle Abhängigkeiten installiert, sodass beim Ausführengo install
automatisch Pakete installiert werden, von denen Ihr Programm abhängt (öffentlich verfügbare "go gettable" -Pakete).Lesen Sie zunächst die offizielle Seite zum Schreiben von Go-Codes .
Weitere Informationen zum
go
Tool: Befehl goSie können auch weitere Hilfe erhalten, indem Sie den folgenden Befehl ausführen:
Es ist auch erwähnenswert, dass ab Go 1.5
go install
auch ausführbare Dateien entfernt werden, die vongo build
( Quelle ) erstellt wurden:Um die Liste zu vervollständigen,
go run
kompilieren Sie Ihre Anwendung in einen temporären Ordner und starten Sie diese ausführbare Binärdatei. Wenn die App beendet wird, werden die temporären Dateien ordnungsgemäß bereinigt.Frage inspiriert von Dave Cheneys Was macht Build Build?
quelle
Für Paket:
Dies wird nach Go 1.10 (Q1 2018) dank CL 68116 und CL 75473 nicht mehr der Fall sein . Siehe diesen Thread , auf den ich hier verweise.
Eigentlich ...
go install
wird sich auch mit Go 1.10 zusätzlich zum neuen Cache ändern :quelle
go build
, tutget
s? Ich habe einen Build-Fehlercannot find package "github.com/spf13/cobra" in any of:…
. Ich weiß nicht, wie ich es sagen soll, um es zu bekommen. Muss ich explizit bekommen?go.mod
Datei?go version go1.11.4 linux/amd64
. Ich weiß nichts über go.mod. Ich baue neuhttps://github.com/cbroglie/mustache/blob/master/cmd/mustache/main.go
, es ist seltsam, da ich gerade das gesamte Paket erstellt habe und dieses Beispiel als Basis verwende. Ich habe eine einfachere Version erstellt, die funktioniert hat (aber diese Bibliothek nicht verwendet). Ich kann nicht sehen, wie es nicht mit dem Schnurrbartpaket installiert wurde.