Einführung in die Verwaltung von Abhängigkeiten in Go
Die Verwaltung von Abhängigkeiten ist ein wichtiger Aspekt eines jeden Softwareprojekts, da sie dabei hilft, die Versionen von Bibliotheken und Paketen zu verwalten, auf die Ihr Projekt angewiesen ist. In Go (Golang) stellt das Abhängigkeitsmanagement sicher, dass Ihre Go-Projekte reproduzierbar und wartbar sind, indem es die Lösung von Versionsproblemen erleichtert, die Kompatibilität mit anderen Paketen aufrechterhält und den gesamten Entwicklungsprozess rationalisiert.
Vor Go Modules war die Verwaltung von Abhängigkeiten in Go weniger rationalisiert. Entwickler griffen oft auf Werkzeuge wie dep
, glide
oder govendor
zurück, um ihre Abhängigkeiten zu verwalten. Diese Tools waren zwar hilfreich, aber sie waren nicht Teil des offiziellen Go-Projekts und verursachten daher bei einigen Entwicklern Reibungsverluste bei der Einführung von Go als Sprache.
Die Ära der Go-Module
Im Jahr 2018 führte das Go-Team das Konzept der "Module" ein, einen neuen Standard für das Abhängigkeitsmanagement in Go-Projekten. Module sind Sammlungen verwandter Pakete, die gemeinsam versioniert werden und alle notwendigen Abhängigkeiten für Ihre Codebasis bereitstellen. Mit der Einführung von Go Modules in Go 1.11 wurde die Verwaltung von Abhängigkeiten einfacher, vielseitiger und wird offiziell vom Go-Projekt unterstützt. Mit Go Modules wurden Funktionen wie folgende eingeführt:
- Versionierung von Abhängigkeiten mit Semantic Versioning (SemVer)
- Vereinfachte Befehle zur Verwaltung von Abhängigkeiten (z. B.
go get
,go mod tidy
) - Automatische Generierung einer Manifestdatei
(go.mod
) mit detaillierten Abhängigkeitsinformationen - Automatisches Herunterladen und Zwischenspeichern der erforderlichen Abhängigkeiten
Mit Go Modules sind Sie nicht mehr verpflichtet, Ihren Code im $GOPATH-Verzeichnis
zu platzieren, was früher eine Einschränkung bei der Go-Entwicklung war. Dieses neue System ermöglicht eine flexiblere Projektstruktur, die die Arbeit an Go-Projekten beim Wechsel zwischen verschiedenen Repositories erleichtert.
Einrichten Ihres Go-Modul-Projekts
Der Einstieg in die Arbeit mit Go-Modulen ist denkbar einfach. Führen Sie die folgenden Schritte aus, um ein neues Go Modules-Projekt einzurichten.
- Stellen Sie zunächst sicher, dass Sie Go Version 1.11 oder höher auf Ihrem System installiert haben. Sie können Ihre Go-Version überprüfen, indem Sie
go version
im Terminal ausführen. - Gehen Sie zu dem von Ihnen gewünschten Ort und erstellen Sie einen neuen Projektordner mit einem beschreibenden Namen, z. B.
my-go-project
. - Navigieren Sie in der Befehlszeile zu dem neu erstellten Ordner.
- Initialisieren Sie ein neues Go-Modul, indem Sie den Befehl
go mod init
, gefolgt von dem Modulpfad, ausführen. Sie können zum Beispielgo mod init github.com/Ihr-Benutzername/mein-go-Projekt
ausführen, wenn Sie das Projekt auf GitHub hosten wollen. Dieser Befehl erzeugt eine neue Datei namensgo.mod
in Ihrem Projektordner.
Die Datei go.mod
ist das Herzstück Ihres Go Modules-Projekts. Sie enthält Metadaten über das Modul, wie z. B. seinen Namen, und listet alle Abhängigkeiten auf, die es benötigt. Sie werden während des gesamten Lebenszyklus Ihres Go-Projekts mit der go.mod-Datei
interagieren, um Ihre Abhängigkeiten zu verwalten. Nachdem Sie nun Ihr Go-Modul-Projekt eingerichtet haben, können Sie mit dem Hinzufügen und Verwalten von Abhängigkeiten mithilfe des Go-Modulsystems beginnen.
Verwalten von Abhängigkeiten in Go-Modulen
Go Modules bietet einen einfachen und effektiven Ansatz zur Verwaltung von Abhängigkeiten in Ihrem Projekt. Es ermöglicht Ihnen, bestimmte Abhängigkeitsversionen hinzuzufügen, zu aktualisieren oder zu entfernen, und hilft Ihnen, die Kontrolle über Ihr Projekt und seine Interaktionen mit anderen Paketen zu behalten. Dieser Abschnitt führt Sie durch den Prozess der Verwaltung von Abhängigkeiten in Ihrem Go Modules-Projekt.
Hinzufügen einer Abhängigkeit
Um eine neue Abhängigkeit hinzuzufügen, müssen Sie lediglich das gewünschte Paket in Ihren Go-Code importieren. Wenn Sie zum Beispiel github.com/gorilla/mux
zu Ihrem Projekt hinzufügen möchten, importieren Sie es wie folgt:
import ( "github.com/gorilla/mux" )
Wenn Sie das nächste Mal go build
oder go test
ausführen, lädt Go automatisch das erforderliche Paket herunter, aktualisiert die Dateien go.mod
und go.sum
und konfiguriert Ihr Projekt so, dass es das angegebene Paket verwendet. Alternativ können Sie auch den Befehl go get
verwenden, um eine neue Abhängigkeit explizit hinzuzufügen:
go get github.com/gorilla/mux
Dadurch wird nicht nur das Paket geholt, sondern auch die Dateien go.mod
und go.sum
Ihres Projekts aktualisiert.
Aktualisieren einer Abhängigkeit
Um eine bestimmte Abhängigkeit auf eine neue Version zu aktualisieren, verwenden Sie den Befehl go get
, gefolgt vom Importpfad des Pakets und der gewünschten Versionsnummer:
go get github.com/gorilla/[email protected]
Mit diesem Befehl wird die Datei go.mod
mit der neuen Version des Pakets aktualisiert und der Quellcode heruntergeladen. Beachten Sie, dass Sie Ihren Code möglicherweise entsprechend anpassen müssen, wenn das aktualisierte Paket bahnbrechende Änderungen mit sich bringt.
Entfernen einer Abhängigkeit
Um eine Abhängigkeit aus Ihrem Projekt zu entfernen, löschen Sie zunächst die entsprechenden Import-Anweisungen aus Ihrem Quellcode. Danach führen Sie den Befehl go mod tidy
aus, um die Datei go.mod
zu bereinigen:
go mod tidy
Dieser Befehl entfernt alle nicht verwendeten Abhängigkeiten aus der Datei go.mod
und sorgt dafür, dass Ihr Projekt sauber und übersichtlich bleibt.
Semantische Versionierung und Go-Module
Semantische Versionierung (SemVer) ist ein weit verbreitetes Versionierungssystem, das Softwareversionen eindeutige Versionsnummern zuweist. Es verwendet ein dreiteiliges Nummerierungsformat: Major.Minor.Patch (z.B. 1.2.3). In SemVer:
- Größere Versionsänderungen weisen auf bahnbrechende Änderungen hin und erfordern manuelle Codeanpassungen.
- Minor-Versionsänderungen führen neue Funktionen ein und bleiben dabei abwärtskompatibel.
- Patch-Versionsänderungen enthalten Fehlerkorrekturen und kleinere Leistungsverbesserungen, die ebenfalls abwärtskompatibel sind.
Go Modules beinhaltet Semantic Versioning, um die Versionierung von Abhängigkeiten zu handhaben, was es Entwicklern ermöglicht, Updates, Abwärtskompatibilität und brechende Änderungen einfacher zu verwalten. Wenn Sie mit Go Modules Versionen von Abhängigkeiten angeben, können Sie Versionsbereiche oder bestimmte Versionsnummern verwenden. Zum Beispiel: - Um die letzte stabile Version eines Pakets abzurufen, verwenden Sie den Paketimportpfad ohne Versionsnummer: go get github.com/gorilla/mux
. - Um eine bestimmte Version abzurufen, fügen Sie die Versionsnummer nach dem @-Symbol
hinzu: go get github.com/gorilla/[email protected].
- Um das letzte Minor- oder Patch-Update innerhalb einer bestimmten Hauptversion abzurufen, verwenden Sie das ^-Symbol
(Caret): go get github.com/gorilla/mux@^v1.0.0
.
Allgemeine Go-Modul-Befehle und ihre Verwendung
Hier sind einige der am häufigsten verwendeten Go-Modul-Befehle und ihre Verwendungsszenarien:
go mod init
go mod init
initialisiert ein neues Go Modules-Projekt im aktuellen Verzeichnis. Es erzeugt eine go.mod-Datei
, die Informationen über das Modul, seine Abhängigkeiten und Versionseinschränkungen enthält.
go mod init beispiel.de/myproject
Ersetzen Sie example.com/myproject
durch den Pfad zu Ihrem Modul.
go get
go get
ist ein vielseitiger Befehl, um eine Abhängigkeit hinzuzufügen, zu aktualisieren oder zu entfernen. Geben Sie den Importpfad des Pakets an, optional gefolgt von einer Versionsnummer oder einem Bereich.
go get github.com/gorilla/[email protected]
Dieser Befehl fügt das Paket github.com/gorilla/mux
hinzu oder aktualisiert es auf die Version v1.8.0.
go mod tidy
go mod tidy
entfernt ungenutzte Abhängigkeiten aus der Datei go.mod
und aktualisiert sie so, dass sie die Import-Anweisungen im Quellcode Ihres Projekts widerspiegelt.
go mod tidy
Führen Sie diesen Befehl aus, nachdem Sie die Importanweisungen für unerwünschte Abhängigkeiten entfernt haben.
go mod graph
go mod graph
stellt den Abhängigkeitsbaum des Projekts dar und zeigt sowohl direkte als auch indirekte Abhängigkeiten in einem lesbaren Format an. Dieser Befehl kann bei der Fehlersuche in komplexen Abhängigkeitsverhältnissen hilfreich sein.
go mod graph
go mod verify
go mod verify
überprüft die Integrität der in der Datei go.sum
aufgeführten Abhängigkeiten. Wenn die Prüfsumme einer Abhängigkeit nicht mit dem aufgezeichneten Wert übereinstimmt, meldet der Befehl einen Fehler.
go mod verify
Auflösen von Abhängigkeitskonflikten
Abhängigkeitskonflikte können entstehen, wenn Ihr Projekt von mehreren Paketen mit unterschiedlichen Versionsanforderungen für gemeinsame Abhängigkeiten abhängt. Go Modules bietet einen eingebauten Mechanismus, um diese Konflikte mit Hilfe der replace-
und exclude-Direktiven
in der Datei go.mod
zu lösen.
Die Replace-Anweisung
Mit der replace-Direktive
können Sie die Version eines Moduls in eine andere Version ändern oder es einem lokalen Pfad zuordnen. Dies kann in Situationen nützlich sein, in denen Sie bestimmte Versionen, geforkete Projekte oder lokale Änderungen testen müssen, bevor Sie sie in ein entferntes Repository übertragen. Um die replace-Direktive zu verwenden, fügen Sie die folgende Zeile in Ihre go.mod-Datei
ein:
replace example.com/original/module v1.2.3 => example.com/new/module v1.4.0
Dies ersetzt example.com/original/module
Version v1.2.3
durch example.com/new/module
Version v1.4.0
. Sie können auch ein Modul durch einen lokalen Pfad ersetzen:
replace example.com/original/module v1.2.3 => ../local/path/to/new/module
Die Exclude-Direktive
Sie können die Exclude-Direktive
verwenden, um zu verhindern, dass bestimmte Versionen eines Moduls in Ihrem Projekt verwendet werden. Dies ist nützlich, wenn Sie wissen, dass eine bestimmte Version Kompatibilitätsprobleme oder Sicherheitsschwachstellen aufweist. Um eine Modulversion auszuschließen, fügen Sie die folgende Zeile in Ihre go.mod-Datei
ein:
exclude example.com/target/module v1.2.3
Denken Sie daran, go mod tidy
auszuführen, nachdem Sie diese Änderungen vorgenommen haben, um die go.sum-Datei
zu aktualisieren und den Abhängigkeitsbaum neu zu berechnen.
Private Go-Module und Repository-Verwaltung
Die Arbeit mit privaten Go-Modulen und -Repositories ist ähnlich wie die Arbeit mit öffentlichen, aber es gibt einige zusätzliche Schritte, um eine korrekte Authentifizierung und Privatsphäre zu gewährleisten.
GOPRIVATE konfigurieren
Um die Weitergabe von Importpfaden an öffentliche Server zu verhindern, konfigurieren Sie die Umgebungsvariable GOPRIVATE
. Diese Variable gibt eine kommagetrennte Liste von Importpfadmustern für private Repositories an.
go env -w GOPRIVATE=example.com/private/path/*
Verwendung von Zugriffstokens
Um private Repositories zu verwenden, müssen Sie sich in der Regel bei Ihrem Quellcode-Hosting-Dienst wie GitHub oder GitLab authentifizieren. Erstellen Sie ein persönliches Zugriffstoken mit geeigneten Berechtigungen (z. B. Repo-Bereich
für GitHub). Die genauen Schritte zur Erstellung eines Zugriffstokens finden Sie in der Dokumentation Ihres Hosting-Dienstes. Nachdem Sie das Zugriffstoken erhalten haben, konfigurieren Sie die Umgebungsvariable für die Authentifizierung. Verwenden Sie die entsprechende Umgebungsvariable für Ihren VCS-Dienst.
export GIT_TERMINAL_PROMPT=0 export GITHUB_TOKEN=YOUR_ACCESS_TOKEN
Damit kann der go-Befehl
private Repositories als Go-Module herunterladen und authentifizieren. Wenn Sie mit mehreren VCS-Diensten arbeiten, können Sie für jeden einzelne Zugriffstoken konfigurieren, indem Sie bei Bedarf separate Umgebungsvariablen definieren.
Umstellung von früheren Systemen zur Verwaltung von Abhängigkeiten
Vor Go Modules gab es verschiedene Systeme zur Verwaltung von Abhängigkeiten wie Dep, Glide oder benutzerdefinierte Anbieterverzeichnislösungen. Wenn Sie diese Systeme noch verwenden, ist es an der Zeit, zu Go Modules zu migrieren, um auf dem neuesten Stand zu bleiben und die Vorteile der modernen Golang-Abhängigkeitsverwaltung zu nutzen. Um von einem früheren System zur Verwaltung von Abhängigkeiten zu Go Modules zu migrieren, folgen Sie diesen Schritten:
- Erstellen Sie ein Backup Ihres ursprünglichen Projekts, um sicherzustellen, dass Sie bei Bedarf zum vorherigen Zustand zurückkehren können.
- Entfernen Sie alle vorhandenen Dateien zur Abhängigkeitsverwaltung (z. B.
Gopkg.toml
oderGopkg.lock
). - Navigieren Sie in einem Terminal zum Stammverzeichnis Ihres Projekts und führen Sie
go mod init
aus, um eine neuego.mod-Datei
zu erstellen. Dabei wird auch versucht, Ihre vorherige Abhängigkeitsdatei, falls vorhanden, in Go Modules-Einträge zu konvertieren. - Führen Sie
go mod tidy
aus, um diego.mod-Datei
mit den Abhängigkeiten aus Ihrem vorherigen System zu füllen. Dieser Befehl stellt sicher, dass nur notwendige Pakete Teil des Abhängigkeitsbaums sind. - An diesem Punkt müssen Sie möglicherweise Anpassungen an Ihrer
go.mod-Datei
vornehmen, um Abhängigkeitskonflikte zu beheben oder bestimmte Versionen zu erzwingen. Verwenden Sie die Direktivenreplace
undexclude
, um diese Probleme zu lösen. - Vergewissern Sie sich, dass Ihr Projekt immer noch gebaut wird und die Tests wie erwartet durchgeführt werden.
Wenn Sie diese Schritte befolgt haben, sollte Ihr Projekt jetzt mit Go Modules funktionieren, was die Verwaltung von Abhängigkeiten vereinfacht und es auf lange Sicht wartbarer macht. Eventuell auftretende Probleme sollten durch Anpassung der go.mod-Datei
oder durch Überprüfung der Importpfade behoben werden, um sicherzustellen, dass sie dem richtigen Format entsprechen.
AppMaster: Beschleunigung der Golang-basierten Anwendungsentwicklung
Die Integration von Go-Modulen und Best Practices für das Abhängigkeitsmanagement in Ihren täglichen Arbeitsablauf ist unerlässlich, um ein wartbares und skalierbares Golang-basiertes Softwareprojekt zu gewährleisten. Aber was wäre, wenn Sie den gesamten Prozess der Anwendungsentwicklung beschleunigen könnten, während Sie immer noch die Leistungsfähigkeit von Golang nutzen?
Hier kommt AppMaster.io ins Spiel, eine umfassende No-Code-Plattform mit dem Schwerpunkt auf der Erstellung von Golang-basierten Backend-Anwendungen unter Verwendung einer visuellen Entwicklungsumgebung. Neben Backend-Anwendungen ermöglicht AppMaster die Erstellung von Web- und Mobilanwendungen mit einem integrierten Ansatz zur Rationalisierung des Entwicklungsprozesses.
Mit AppMaster können Benutzer Datenmodelle (Datenbankschema) erstellen, Geschäftsprozesse entwerfen und REST API und WebSocket endpoints über eine visuelle Benutzeroberfläche definieren. Webanwendungen werden über eine Drag-and-Drop-Oberfläche zusammen mit einem Web Business Process Designer erstellt, der eine vollständig interaktive Benutzererfahrung ermöglicht. Mobile Anwendungen werden in ähnlicher Weise mit einem mobilen Geschäftsprozess-Designer und UI-Design-Funktionen entworfen.
AppMasterDie Plattform des Unternehmens übernimmt Ihre Entwürfe und generiert den Quellcode für Ihre Anwendungen, sobald Sie auf die Schaltfläche "Veröffentlichen" klicken. Sie kompiliert die Anwendungen, führt Tests durch, packt sie in Docker-Container (für Backend-Anwendungen) und stellt alles in die Cloud bereit - alles innerhalb von Sekunden.
Backend-Anwendungen werden mit Golang (Go) erstellt und profitieren von der Leistung, Einfachheit und Wartungsfreundlichkeit, die Golang bietet. Webanwendungen werden mit dem Vue3-Framework und JavaScript/TypeScript erstellt, während für mobile Anwendungen das servergesteuerte Framework AppMaster, Kotlin und Jetpack Compose für Android und SwiftUI für iOS-Anwendungen verwendet werden.
Dank der leistungsstarken Plattform AppMaster können auch Personen ohne Programmierkenntnisse eine vollständige, skalierbare Softwarelösung erstellen, die Server-Backends, Websites, Kundenportale und native mobile Anwendungen umfasst. AppMaster beschleunigt nicht nur den gesamten Softwareentwicklungsprozess, sondern eliminiert auch technische Schulden vollständig, indem Anwendungen bei jeder Änderung der Anforderungen von Grund auf neu generiert werden.
Wenn Sie erwägen, eine no-code Plattform für Ihre Softwareentwicklung einzusetzen, insbesondere eine, die die Vorteile von Golang nutzt, sollte AppMaster ganz oben auf Ihrer Liste stehen. Melden Sie sich für ein kostenloses Konto an und entdecken Sie die Zukunft der Anwendungsentwicklung mit einer Lösung, die 10x schneller und 3x kostengünstiger ist.