suchen
HeimBackend-EntwicklungGolangEinführung in die Verwendung von Go Get für die Paketverwaltung in Go-Modulen

Einführung in die Verwendung von Go Get für die Paketverwaltung in Go-Modulen

Paketverwaltung unter Modul

Zuerst haben wir go mod edit eingeführt, um go.mod zu ändern, aber Es weist zwei Mängel auf:

1. Erstens muss sein -require die Form „package@version“ akzeptieren, was unerlässlich ist, und es kann die im Dokument angegebenen Master- und Latest-Flags nicht erkennen.

2. Zweitens eignet sich Bearbeiten nur zum Ändern von Abhängigkeitsversionen, zum Umbenennen von Paketen und zum Blockieren bestimmter Pakete. Es ist nicht zum Hinzufügen von Abhängigkeiten geeignet.

Die gute Nachricht ist, dass go get jetzt die Möglichkeit hat, Pakete in Modulen hinzuzufügen/zu ändern/aktualisieren.

Um Go-Module vollständig nutzen zu können, müssen wir ein anderes Verzeichnis als GOPATH auswählen und GO11MODULE=on festlegen. Auf diese Weise wirkt sich die Verwendung von go get nur auf das aktuelle Hauptmodul aus und belastet GOPATH nicht.

Wir klonen das Projekt auf einen Nicht-GOPATH-Pfad und verwenden dann

go mod init [project name]

, um das Modul zu initialisieren. Initialisiertes Verzeichnis:

Einführung in die Verwendung von Go Get für die Paketverwaltung in Go-Modulen

Zu diesem Zeitpunkt ist go.mod noch leer. Wir wissen, dass go.mod go.mod aktualisieren wird, also gehen wir zuerst zu build

Einführung in die Verwendung von Go Get für die Paketverwaltung in Go-Modulen

Standardmäßig wird go.mod verwendet, um das neueste Paket zu erhalten. Jetzt wurde go.mod aktualisiert und das Projekt wurde erfolgreich kompiliert. Dies ist die Bedeutung von go.mod:

module schanclient

require (
    github.com/PuerkitoBio/goquery v1.4.1
    github.com/andybalholm/cascadia v1.0.0 // indirect
    github.com/chromedp/chromedp v0.1.2
    golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect
)

indirekt Dies bedeutet, dass dieses Paket vom Untermodul/Paket abhängt, das Hauptmodul jedoch nicht direkt importiert und verwendet wird, was die sogenannte indirekte Referenz ist.

Normalerweise kann go.mod die Paketverwaltung mit dem Standardverhalten gut abschließen, aber es gibt immer einige Ausnahmen im Leben.

Wir sehen, dass chromedp Version 0.1.2 verwendet, also die Version vor drei Monaten. Bei der Go-Mod-Bearbeitung müssen die Versionsnummer oder die Commit-Zeit + Prüfsumme eindeutig angegeben werden mühsam und nicht das, was wir wollen.

Wie können wir also die neueste Version anstelle der neuesten Tags verwenden?

Oder möchten wir vielleicht nicht die neueste Version und benötigen eine bestimmte Version des Pakets?

Dies ist der Inhalt der Versionsauswahl.

Neue Funktionen von go get – Versionsauswahl

Früher gab es eine Lösung wie gopkg.in+go get, aber die neue Die von go get unterstützte Versionsauswahl ist eine weitere Erweiterung dieser Lösung. Beachten Sie einige Regeln:

go get lädt das Paket automatisch herunter, installiert es und aktualisiert es dann auf go.mod

Ja. Verwenden Sie go get package[@version], um die angegebene Version des Pakets zu installieren. Wenn die Version nicht angegeben ist, ist das Standardverhalten dasselbe wie bei go get package@latest

Die Version kann in der Form vorliegen von vx.y.z oder verwenden Sie direkt die Commit-Prüfsumme.

Bei Paketen mit Tags wird das neueste Tag ausgewählt Tags, der neueste Commit

Wenn die Version „Master“ ist, wird unabhängig davon, ob das Paket getaggt ist oder nicht, der neueste Commit des Master-Zweigs ausgewählt

Sie können > ;, >=,

go get -u kann aktualisiert werden das Paket auf die neueste Version

go get -u=patch aktualisiert nur die neueste Version, zum Beispiel von v1.2.4 auf v1.2.5

Wenn Sie die Paketversion ändern möchten , Sie müssen nur das Paket@angegebene Version holen

Dann wollen wir chromedp ändern. Es ist einfach, die neueste Version zu verwenden:

go get github.com/chromedp/chromedp@master

Jetzt wurde chromedp in go.mod aktualisiert:

module schanclient

require (
	github.com/PuerkitoBio/goquery v1.4.1
	github.com/andybalholm/cascadia v1.0.0 // indirect
	github.com/chromedp/chromedp v0.1.3-0.20180717231922-bf52fed0d3e6
	golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect
)

Was ist, wenn wir jetzt zusätzliche Pakete hinzufügen möchten?

Verwenden Sie einfach go get direkt. Ich möchte beispielsweise gorm verwenden, um Daten in der Datenbank zu speichern:

go get github.com/jinzhu/gorm

Der aktualisierte go.mod

module schanclient

require (
	github.com/PuerkitoBio/goquery v1.4.1
	github.com/andybalholm/cascadia v1.0.0 // indirect
	github.com/chromedp/chromedp v0.1.3-0.20180717231922-bf52fed0d3e6
	github.com/jinzhu/gorm v1.9.1 // indirect
	github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a // indirect
	golang.org/x/net v0.0.0-20180826012351-8a410e7b638d // indirect
)

Wir sehen das Neueste version Der Gorm wurde natürlich hinzugefügt, weil wir ihn nicht in das Hauptmodul importiert haben, also ist er indirekt.

Wenn wir v1.9 Gorm verwenden möchten:

go get github.com/jinzhu/gorm@v1.9

Leider erfolgt die Versionsauswahl von der Hauptversion zur Nebenversion, wenn es v1.9 und v1.9.1 gibt Wenn Sie v1.9 angeben, wird automatisch die Version mit der höchsten Nebenversionsnummer ausgewählt, es sei denn, es gibt kein anderes v1.9.z-Tag außer v1.9, in diesem Fall v1.9.1.

Ein weiterer erwähnenswerter Punkt ist, dass go build und go test nur Pakete hinzufügen, die nicht in go.mod enthalten sind, und die von go get eingeführten Regeln nicht überschreiben oder ändern, sodass Sie sich darüber keine Sorgen machen müssen widersprüchlich.

Glauben Sie, dass es venv+pip ähnelt? Ja, das zeigt, dass die Paketverwaltungstools von go allmählich moderner werden.

Was das Blockieren von Paketen, das Löschen von Paketen und das Umbenennen von Paketen betrifft (z. B. nicht zugängliche Pakete unter golang.org/x/...), sind dies die Funktionen von go mod edit. Weitere Informationen finden Sie in der go-Hilfe-Mod bearbeiten .

Empfohlen: Gehe zum Sprachtutorial

Das obige ist der detaillierte Inhalt vonEinführung in die Verwendung von Go Get für die Paketverwaltung in Go-Modulen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:博客园. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Sicherheitsüberlegungen bei der Entwicklung mit GoSicherheitsüberlegungen bei der Entwicklung mit GoApr 27, 2025 am 12:18 AM

GooffersrobustFeaturesForsecurecoding, butdeveloperMustimplementsCurityBestPracticeSeffective.1) UseGo'ScryptopackageForScedatahandling.2) ManageConcurrencywithsynchronizationPrimitivestopreventraceconcitions.3) Sanitendien.3) HANNISITEPERCEEPERCEEPERCEEPERSCEEDEEXTERSEXTERSUCHE

Verständnis der Fehleroberfläche von GoVerständnis der Fehleroberfläche von GoApr 27, 2025 am 12:16 AM

Die Fehlerschnittstelle von GO ist als TypeErrorInterface {error () String} definiert, sodass jeder Typ, der die Fehler (ERROR () -Methode implementiert, als Fehler angesehen werden kann. Die Verwendung für die Verwendung sind wie folgt: 1. Überprüfen Sie im Grunde genommen Fehler und Protokollfehler, wie z. 2. Erstellen Sie einen benutzerdefinierten Fehlertyp, um weitere Informationen bereitzustellen, z. 3. Verwenden Sie Fehlerverpackungen (seit Go1.13), um den Kontext hinzuzufügen, ohne die ursprüngliche Fehlermeldung zu verlieren.

Fehlerbehandlung in gleichzeitigen GO -ProgrammenFehlerbehandlung in gleichzeitigen GO -ProgrammenApr 27, 2025 am 12:13 AM

TOEFFEKTIVE HANDLEERSINCONCURENTGOPROGRAMMEN, UsechannelstocommunicateErrors, ImplementErrorWatchers, Considertimeouts, UseBiftedChannels und ProvideClearErrormessages.1) Usechannelstopassirrorsfromgoroutinestothänenfunktion.2) ImplementanerErrorWesser

Wie implementieren Sie Schnittstellen in Go?Wie implementieren Sie Schnittstellen in Go?Apr 27, 2025 am 12:09 AM

In der GO -Sprache wird die Implementierung der Schnittstelle implizit durchgeführt. 1) Implizite Implementierung: Solange der Typ alle von der Schnittstelle definierten Methoden enthält, wird die Schnittstelle automatisch erfüllt. 2) leere Schnittstelle: Alle Arten von Schnittstellen {} -Typen werden implementiert, und eine mäßige Verwendung kann die Sicherheitsprobleme von Typen vermeiden. 3) Schnittstellenisolierung: Entwerfen Sie eine kleine, aber fokussierte Schnittstelle, um die Wartbarkeit und Wiederverwendbarkeit des Codes zu verbessern. 4) Test: Die Schnittstelle hilft dem Einheitstest durch Verspottung von Abhängigkeiten. 5) Fehlerbehandlung: Der Fehler kann durch die Schnittstelle einheitlich behandelt werden.

Vergleichen Sie GO -Schnittstellen mit Schnittstellen in anderen Sprachen (z. B. Java, C#)Vergleichen Sie GO -Schnittstellen mit Schnittstellen in anderen Sprachen (z. B. Java, C#)Apr 27, 2025 am 12:06 AM

Go'SinterFaCesAmpliclituryImplemented, im Gegensatz zu Javaandc#WHO REQUIREXPICITImplementation.1) Ingo, AnytypewithTherequiredMethodsautomaticImplementsAnterInterface, PromotingsImplicity und Flexibilität.2) Javaandc#formitizitimitincincitinclace -Issimplication, Opfer

Init -Funktionen und Nebenwirkungen: Einbalancieren der Initialisierung mit WartbarkeitInit -Funktionen und Nebenwirkungen: Einbalancieren der Initialisierung mit WartbarkeitApr 26, 2025 am 12:23 AM

TensureinitFunctionsAreefectivenandMainableable: 1) minimiertsideffectsByReturningValuesinsteadofmodifyingglobalState, 2) safidEmpotencytohandlemultiplecallsSafely und 3) BreakdowncomplexinitialisierungIntosmaller, focusedFunctionStoenhEmodulus und maller, undmaller und stunschstörungen und störungen und störungen und störungen und störungen und störungen und störungen und störungen und störungen und störungen und störungen sind, diestöpfenhöreskräkuliskenntn und malker, und maller, und maller, focusedFocusedFunctionStoenhEmodulus und m

Erste Schritte mit Go: Ein AnfängerführerErste Schritte mit Go: Ein AnfängerführerApr 26, 2025 am 12:21 AM

GoisidealforBeginersandSuitableforCloudandNetWorkServicesDuetoitsSimplicity, Effizienz und Konsumfeaturen.1) InstallgoFromTheofficialwebSiteAnDverifyWith'goversion'.2) CreateAneDrunyourFirstProgramwith'gorunhello.go.go.go.

Gehen Sie Parallelitätsmuster: Best Practices für EntwicklerGehen Sie Parallelitätsmuster: Best Practices für EntwicklerApr 26, 2025 am 12:20 AM

Entwickler sollten den folgenden Best Practices folgen: 1. verwalten Goroutinen sorgfältig, um Ressourcenleckage zu verhindern; 2. Verwenden Sie Kanäle zur Synchronisation, aber vermeiden Sie Überbeanspruchung; 3.. Ausdrücklich Fehler in gleichzeitigen Programmen bewältigen; 4. Verstehen Sie GomaxProcs, um die Leistung zu optimieren. Diese Praktiken sind für eine effiziente und robuste Softwareentwicklung von entscheidender Bedeutung, da sie eine effektive Verwaltung von Ressourcen, eine ordnungsgemäße Synchronisierungsimplementierung, die ordnungsgemäße Fehlerbehandlung und die Leistungsoptimierung gewährleisten, wodurch die Software -Effizienz und die Wartbarkeit verbessert werden.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Herunterladen der Mac-Version des Atom-Editors

Herunterladen der Mac-Version des Atom-Editors

Der beliebteste Open-Source-Editor

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools