Каковы последствия использования директивы версии go в файле модуля go (go.mod)

11

Имеется следующий файл go.mod:

module foo

go 1.12

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

Что это значит go 1.12? Это мешает компиляции fooмодуля против любой другой версии Go? Или это просто индикатор fooрекомендуемой / необходимой версии Go? Это директива, которую мы должны обновлять всякий раз, когда выпускается новая версия go (каждые 6 месяцев)?

mdwhatcott
источник
3
См. Golang.org/doc/go1.12#modules
Cerise Limón
1
Также: golang.org/cmd/go/#hdr-The_go_mod_file : ожидаемая языковая версия, установленная директивой go, определяет, какие языковые функции доступны при компиляции модуля. Языковые функции, доступные в этой версии, будут доступны для использования. Языковые функции, удаленные в более ранних версиях или добавленные в более поздних версиях, будут недоступны. Обратите внимание, что языковая версия не влияет на теги сборки, которые определяются используемой версией Go.
19

Ответы:

5

Это следует рассматривать в соответствии с минимальной требуемой версией Go. Если вы собираете с той же или более поздней версией Go, все должно быть хорошо, как обещано обещанием совместимости с Go 1 . Если вы соберете более низкую версию, в случае сбоя сборки появится сообщение об ошибке:

Директива go в файле go.mod теперь указывает версию языка, используемого файлами в этом модуле. Будет установлен текущий выпуск (переход 1.12), если существующая версия отсутствует. Если директива go для модуля указывает версию, более новую, чем используемая цепочка инструментов, команда go попытается собрать пакеты независимо и заметит несоответствие только в случае сбоя этой сборки. Go 1.12 Примечания к выпуску

TehSphinX
источник