Wie man Dateien von `go get` in Golang ausschließt
Wenhao Wang
Dev Intern · Leapcell

Key Takeaways
- Verwenden Sie Go Build Constraints (
//go:build tag
), um Dateien von der Kompilierung auszuschließen. - Trennen Sie Verzeichnisse mit
go.mod
, um die Aufnahme in Builds und Dokumentation zu verhindern. - Ausgeschlossene Dateien werden ignoriert, es sei denn, sie werden während des Build-Prozesses explizit mit
-tags
eingeschlossen.
In Go ist es entscheidend für die Aufrechterhaltung einer sauberen und effizienten Codebasis zu verwalten, welche Dateien während des Build-Prozesses eingeschlossen werden. Während der Befehl go get
hauptsächlich zum Herunterladen und Installieren von Paketen verwendet wird, wird die Steuerung der Einbeziehung bestimmter Dateien während des Builds durch Build Constraints, auch bekannt als Build-Tags, erreicht. Diese Direktiven ermöglichen es Entwicklern, Dateien basierend auf bestimmten Bedingungen in den Build einzubeziehen oder auszuschließen.
Verständnis von Build Constraints
Build Constraints sind spezielle Kommentare, die am Anfang von Go-Quelldateien platziert werden und festlegen, wann eine Datei während des Build-Prozesses in das Paket aufgenommen werden soll. Sie sind besonders nützlich, um Dateien auszuschließen, die in bestimmten Build-Kontexten nicht relevant sind.
Syntax von Build Constraints
Für Go-Versionen 1.17 und später lautet die Syntax für einen Build Constraint:
//go:build [Bedingung]
Für Versionen vor 1.17 lautet die Syntax:
// +build [Bedingung]
Diese Zeilen müssen vor der Paketdeklaration in der Quelldatei erscheinen.
Ausschließen von Dateien vom Build
Um eine Datei vom Build auszuschließen, können Sie ein benutzerdefiniertes Build-Tag definieren. Um beispielsweise eine Datei mit dem Tag exclude
auszuschließen, fügen Sie die folgende Zeile am Anfang der Datei hinzu:
//go:build exclude
Für Versionen unter 1.17:
// +build exclude
Mit dieser Direktive ignoriert die Go-Toolchain die Datei, es sei denn, das Tag exclude
wird während des Builds explizit angegeben. Um Builds einschließlich Dateien mit dem Tag exclude
zu erstellen, verwenden Sie:
go build -tags=exclude
Standardmäßig werden diese Dateien vom Build ausgeschlossen, wenn go build
ohne das Flag -tags=exclude
ausgeführt wird.
Praktisches Beispiel
Angenommen, Sie haben eine Datei debug.go
, die Debugging-Dienstprogramme enthält, die nicht für Produktions-Builds vorgesehen sind. Fügen Sie am Anfang von debug.go
Folgendes hinzu:
//go:build debug
Wenn Sie für die Produktion bauen, führen Sie einfach Folgendes aus:
go build
Dieser Befehl schließt debug.go
vom Build aus. Für einen Entwicklungs-Build, der Debugging-Dienstprogramme enthält, verwenden Sie:
go build -tags=debug
Ausschließen von Verzeichnissen
Um ein ganzes Verzeichnis, z. B. examples
, vom Build und der Dokumentation auszuschließen, können Sie eine separate go.mod
-Datei in das Verzeichnis examples
legen. Dieser Ansatz behandelt das Verzeichnis als separates Modul und verhindert, dass es in den Haupt-Build-Prozess einbezogen wird. Wie im Go-Forum erläutert, isoliert das Hinzufügen einer go.mod
-Datei zum Verzeichnis examples
dieses effektiv vom Hauptmodul.
Schlussfolgerung
Während sich go get
auf das Abrufen und Installieren von Paketen konzentriert, wird die Steuerung, welche Dateien während des Builds eingeschlossen werden, durch Build Constraints verwaltet. Indem Sie Build-Tags effektiv verwenden und Ihr Projekt unter Berücksichtigung von Aspekten wie separaten go.mod
-Dateien für Beispielverzeichnisse strukturieren, können Sie einen sauberen und effizienten Build-Prozess in Go aufrechterhalten.
FAQs
Fügen Sie //go:build [tag]
am Anfang der Datei hinzu und vermeiden Sie die Angabe des Tags während des Builds.
Ja, indem Sie eine go.mod
-Datei in das Verzeichnis legen und es als separates Modul behandeln.
Dateien mit Build Constraints werden ausgeschlossen, es sei denn, sie werden explizit mit -tags
eingeschlossen.
Wir sind Leapcell, Ihre erste Wahl für das Hosting von Go-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- Zahlen Sie nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeit-Metriken und -Protokollierung für verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Aufwand - konzentrieren Sie sich einfach auf den Aufbau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ