#go #go-modules
#Вперед #go-modules
Вопрос:
Я играю с GraphQL в Go, и я пытался получить инструмент gqlgen, используя знакомую go run
команду.
Я ожидал, что он получит последний доступный тег, вместо этого я каким-то образом получаю тег, который, похоже, вообще не существует в репозитории:
$ go run github.com/99designs/gqlgen version
v0.9.1-dev
Я бы ожидал, что приведенное выше значение будет возвращено для последнего тега
v0.13.0
Версия Go установлена на моей рабочей станции:
$ go version
go version go1.15.5 darwin/amd64
У кого-нибудь есть идеи, что происходит?
ОБНОВЛЕНИЕ: отключение GOPROXY
не помогает
UPDATE2: оказывается, версия жестко запрограммирована version.go
, как вы можете видеть здесь, но даже если go run
вместо последнего тега будет получен мастер, вы все равно ожидаете, что результат будет 0.13.0-dev
соответствовать основной ветке, вместо этого я подозреваю, что существует некоторый порядок строк версий тегов, порядок 0.9.*
которых выше 0.1*.*
Комментарии:
1. Вы не должны использовать
go run
, если версии имеют какое-либо значение. Лучше просто избегать этого вообще.
Ответ №1:
go run
в настоящее время не поддерживает запуск определенной версии двоичного файла, но обратите внимание, что есть принятое предложение Go добавить эту функциональность в будущую версию go
команды.
Начиная с версии 1.16, вы можете вместо go install
этого использовать двоичный файл с определенной версией, а затем запускать этот двоичный файл из его места установки (либо $(go env GOBIN)
или $(go env GOPATH)/bin
).
$ GOBIN=~/bin go install github.com/99designs/gqlgen@latest
$ ~/bin/gqlgen ...
Комментарии:
1. Для версий Go через Go 1.16
go run
выполняется любая версия, уже указанная зависимостями текущего модуля. Вы можете определить эту версию с помощьюgo list -f '{{with .Module}}{{.Path}} {{.Version}}{{end}}' github.com/99designs/gqlgen
.
Ответ №2:
Я думаю, что команда version была неправильно настроена при сборке, и что v0.9.1-dev не был тегом во время сборки.