Welche Version von Go wird zum Kompilieren von Abhängigkeiten verwendet?

王林
Freigeben: 2024-02-08 23:50:21
nach vorne
817 Leute haben es durchsucht

Der

使用什么版本的 Go 来编译依赖项?

php-Editor Baicao beantwortet Ihre Frage, welche Version von Go zum Kompilieren von Abhängigkeiten verwendet werden soll. Beim Kompilieren von Go-Code ist die Wahl der Abhängigkeitsversionen entscheidend. Im Allgemeinen wird empfohlen, Abhängigkeitsversionen zu verwenden, die mit Go-Versionen kompatibel sind, von denen bekannt ist, dass sie in Ihrem Projekt stabil laufen. Dadurch wird die Stabilität und Kompatibilität des Codes gewährleistet. Gleichzeitig sollten Sie auch berücksichtigen, ob die verwendeten Abhängigkeiten noch gewartet werden und ob es Updates gibt, die mit der neuesten Version von Go kompatibel sind. Unter umfassender Berücksichtigung der Projektanforderungen und der Eigenschaften der Abhängigkeiten kann die Auswahl der geeigneten Go-Version zum Kompilieren der Abhängigkeiten den stabilen Betrieb des Projekts weitestgehend gewährleisten.

Frageninhalt

Verwenden Sie beim Kompilieren eines Go-Programms dieselbe Version von Go, um den Hauptcode und den abhängigen Code zu kompilieren?

Lösung

Das ist eine interessante Frage und hat eine etwas subtile Antwort.

Für ältere Versionen von Go ist die Antwort einfach: Jede Abhängigkeit wird mit der Version von Go kompiliert, die Sie lokal ausführen. Wenn Sie Go 1.9 ausführen und Abhängigkeiten für Go 1.10 erstellt haben, wird der Compiler nicht sinnvollerweise versuchen, Go 1.10-Code mit Go 1.9 zu kompilieren. Solange in dieser Abhängigkeit keine neuen Funktionen verwendet werden, funktioniert alles einwandfrei. Wenn Sie eine Abhängigkeit für Go 1.8 geschrieben haben, wird diese auch mit Go 1.9 kompiliert.

Bei modernen Versionen von Go und allen Projekten (oder Abhängigkeiten), die go.mod-Dateien verwenden, ist das Verhalten jedoch anders. Aus der Go-Modulreferenz erfahren wir:

  • Für Pakete innerhalb von Modulen weigert sich der Compiler, Sprachfunktionen zu verwenden, die nach der durch die go-Direktive angegebenen Version eingeführt wurden. Wenn ein Modul beispielsweise über die Direktive go 1.12 verfügt, darf sein Paket keine in Go 1.13 eingeführten numerischen Literale wie 1_000_000 verwenden.

Das bedeutet, dass Ihre Abhängigkeit nur Funktionen nutzt, die in ihrer deklarierten Go-Version verfügbar sind. Sie werden jedoch immer noch mit der modernen Go-Laufzeitumgebung erstellt. Daher werden alle Leistungsverbesserungen, Sicherheitsverbesserungen usw., die in Ihrer Go-Version (neuer als die durch die Abhängigkeit deklarierte Version) gefunden werden, weiterhin verwendet.

Außerdem lautet die nächste Zeile im selben Dokument:

  • Wenn eine ältere Go-Version ein Paket eines Moduls erstellt und auf einen Kompilierungsfehler stößt, weist der Fehler darauf hin, dass das Modul für eine neuere Go-Version geschrieben wurde. Angenommen, die Modulversion ist 1.13 und das Paket verwendet das numerische Literal 1_000_000. Wenn das Paket mit Go 1.12 erstellt wurde, zeigt der Compiler an, dass der Code für Go 1.13 geschrieben wurde.

Das heißt also: Wenn Sie versuchen, ein Programm mit Go 1.19 zu erstellen und eine der Abhängigkeiten Version 1.20 deklariert und ein Kompilierungsfehler vorliegt, werden Sie in der Compilerausgabe über mögliche Kompatibilitätsprobleme informiert. Wenn es keine Kompilierungsfehler gäbe, würden Sie den Unterschied möglicherweise nie bemerken (da Abhängigkeiten, die möglicherweise für 1.20 deklariert werden, tatsächlich keine der neuen 1.20-Compilerfunktionen verwenden).

Dies wird voraussichtlich in Go 1.22 spürbarere Auswirkungen haben als zuvor, vorausgesetzt, der Vorschlag „weniger fehleranfällige Schleifenvariablenbereiche“ wird angenommen und rechtzeitig umgesetzt. Da dieser Vorschlag die Art und Weise ändern würde, wie Schleifenvariablen nicht abwärtskompatibel behandelt werden. Angenommen, dies schafft es in Go 1.22, bedeutet dies, dass jedes mit oder höher deklarierte Modul die neue Schleifensemantik verwenden wird. Dies wäre das erste Mal, dass Go sein Abwärtskompatibilitätsversprechen bricht, wenn auch wohl aus gutem Grund (da diese Sache mit den Schleifenvariablen fast jeden in Schwierigkeiten brachte).

Das obige ist der detaillierte Inhalt vonWelche Version von Go wird zum Kompilieren von Abhängigkeiten verwendet?. 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