Welche Auswirkungen hat die Verwendung der Versionsanweisung "go" in einer go-Moduldatei (go.mod)?

11

Angesichts der folgenden go.mod-Datei:

module foo

go 1.12

require (
    github.com/bar/baz v1.0.0
    github.com/rat/cat v1.0.0
)

Was bedeutet das go 1.12? Verhindert es das Kompilieren des fooModuls mit einer anderen Version von Go? Oder ist es einfach ein Indikator für die fooempfohlene / erforderliche Go-Version? Ist dies eine Anweisung, die wir aktualisieren sollten, wenn eine neue Version von go veröffentlicht wird (alle 6 Monate)?

mdwhatcott
quelle
3
Siehe golang.org/doc/go1.12#modules
Cerise Limón
1
Außerdem: golang.org/cmd/go/#hdr-The_go_mod_file : Die erwartete Sprachversion, die durch die go-Direktive festgelegt wird, bestimmt, welche Sprachfunktionen beim Kompilieren des Moduls verfügbar sind. Die in dieser Version verfügbaren Sprachfunktionen stehen zur Verfügung. Sprachfunktionen, die in früheren Versionen entfernt oder in späteren Versionen hinzugefügt wurden, sind nicht verfügbar. Beachten Sie, dass die Sprachversion keine Auswirkungen auf Build-Tags hat, die von der verwendeten Go-Version bestimmt werden.
icza

Antworten:

5

Es sollte im Sinne einer mindestens erforderlichen Go-Version betrachtet werden. Wenn Sie mit derselben oder einer höheren Version von Go erstellen, sollte alles in Ordnung sein, wie es das Go 1-Kompatibilitätsversprechen verspricht . Wenn Sie mit einer niedrigeren Version erstellen, wird eine Fehlermeldung angezeigt, wenn der Build fehlschlägt:

Die go-Direktive in einer go.mod-Datei gibt jetzt die Version der Sprache an, die von den Dateien in diesem Modul verwendet wird. Es wird auf die aktuelle Version (go 1.12) gesetzt, wenn keine vorhandene Version vorhanden ist. Wenn die go-Direktive für ein Modul eine neuere Version als die verwendete Toolchain angibt, versucht der Befehl go, die Pakete unabhängig davon zu erstellen, und stellt die Nichtübereinstimmung nur dann fest, wenn diese Erstellung fehlschlägt. Go 1.12 Versionshinweise

TehSphinX
quelle