Warum werden bei Verwendung von -u zwei Versionen desselben Pakets heruntergeladen?

WBOY
Freigeben: 2024-02-12 22:00:11
nach vorne
558 Leute haben es durchsucht

为什么 go get 在使用 -u 时会下载同一包的两个版本

Der Herausgeber von PHP erklärt, warum zwei Versionen desselben Pakets heruntergeladen werden, wenn der Befehl „go get -u“ verwendet wird. Der Grund für dieses Problem liegt in der Funktionsweise von Go Mod. go mod ist ein von der Go-Sprache in Version 1.11 eingeführtes Abhängigkeitsverwaltungstool, das Abhängigkeitspakete basierend auf der go.mod-Datei des Projekts automatisch herunterlädt und verwaltet. Wenn wir den Befehl „go get -u“ verwenden, überprüft er die Version des Abhängigkeitspakets in der Datei go.mod und versucht, die neueste Version herunterzuladen. Allerdings können Versionsaktualisierungen einiger Pakete von unterschiedlichen Versionen anderer Pakete abhängen, daher lädt go mod zwei Versionen des Pakets herunter, um die Abhängigkeit zu erfüllen, weshalb zwei Versionen desselben Pakets heruntergeladen werden.

Frageninhalt

Ich verwende go get -u 来获取依赖于 golang.org/x/[email protected] 的软件包。我注意到它首先下载 golang.org/x/[email protected] 然后下载 golang.org/x/[email protected].

Dann renne ich go clean -modcachego get golang.org/x/text ,它下载了 golang.org/x/textv0.4.0 ,然后再次 go get -u entgo.io/ent 。这次 go 没有下载 golang.org/x/[email protected]

Also, warum go get -u lädt sowohl die alte als auch die neueste Version herunter, wenn die neueste Version lokal nicht verfügbar ist, und warum lädt es nicht die alte Version herunter, wenn die neueste Version lokal verfügbar ist?

Workaround

Weil es sich um einen zweistufigen Prozess handelt

  1. Abhängigkeiten abrufen
  2. Abhängigkeiten aktualisieren

Aus Programmiersicht gibt es keinen guten Grund, diese in einem einzigen Schwerpunkt „Holen Sie sich die neuesten Abhängigkeiten“ zusammenzufassen.

Aus der go-Befehlsdokumentation:

Das Flag

-u weist get an, Module zu aktualisieren, die Abhängigkeiten für das in der Befehlszeile genannte Paket bereitstellen, um neuere Neben- oder Patchversionen zu verwenden, sofern verfügbar.

Das bedeutet, dass -u speziell die Module behandeln, von denen das von Ihnen abgerufene Paket abhängt, und nicht das Modul des von Ihnen abgerufenen Pakets.

Darüber hinaus scheint -u 与将 v0 版本中的任何更改视为主要版本更改的 Go 惯用法无关,因此不能出于原则轻易推荐使用 -u nichts mit der Go-Idiom zu tun zu haben, jede Änderung in der v0-Version als große Versionsänderung zu behandeln, sodass die Verwendung von aus Prinzip nicht ohne weiteres empfohlen werden kann. In der Readme-Datei für golang.org/x/test

steht sogar:

Nebenversionen gelten als Hauptversionen, bis die x/text-Version 1.0.0 erreicht. Daher gilt der Wechsel von 0.1.0 auf 0.2.0 als Hauptversions-Upgrade. 🎜

Das obige ist der detaillierte Inhalt vonWarum werden bei Verwendung von -u zwei Versionen desselben Pakets heruntergeladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!