Jakie są konsekwencje zastosowania dyrektywy wersji „go” w pliku modułu go (go.mod)

11

Biorąc pod uwagę następujący plik go.mod:

module foo

go 1.12

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

Co to go 1.12oznacza? Czy to uniemożliwia kompilację foomodułu z jakąkolwiek inną wersją Go? Czy jest to po prostu wskaźnik foozalecanej / wymaganej wersji Go? Czy jest to dyrektywa, którą powinniśmy aktualizować za każdym razem, gdy wydawana jest nowa wersja go (co 6 miesięcy)?

mdwhatcott
źródło
3
Zobacz golang.org/doc/go1.12#modules
Cerise Limón
1
Ponadto: golang.org/cmd/go/#hdr-The_go_mod_file : Oczekiwana wersja językowa, ustawiona przez dyrektywę go, określa, które funkcje językowe są dostępne podczas kompilacji modułu. Funkcje językowe dostępne w tej wersji będą dostępne do użytku. Funkcje językowe usunięte we wcześniejszych wersjach lub dodane w późniejszych wersjach nie będą dostępne. Pamiętaj, że wersja językowa nie wpływa na tagi kompilacji, które zależą od używanej wersji Go.
icza

Odpowiedzi:

5

Należy wziąć pod uwagę minimalną wymaganą wersję Go. Jeśli budujesz z tą samą lub wyższą wersją Go, wszystko powinno być w porządku, zgodnie z obietnicą zgodności Go 1 . Jeśli kompilujesz w niższej wersji, w przypadku niepowodzenia kompilacji pojawi się komunikat o błędzie:

Dyrektywa go w pliku go.mod wskazuje teraz wersję języka używanego przez pliki w tym module. Zostanie ustawiona na bieżącą wersję (wersja 1.12), jeśli nie ma żadnej istniejącej wersji. Jeśli dyrektywa go dla modułu określa wersję nowszą niż używany zestaw narzędzi, komenda go podejmie próbę zbudowania pakietów niezależnie i zanotuje niezgodność tylko wtedy, gdy kompilacja się nie powiedzie. Idź 1.12 Informacje o wersji

TehSphinX
źródło