Heim >Backend-Entwicklung >Golang >Einfü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

尚
nach vorne
2019-11-30 14:18:132694Durchsuche

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:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen