У меня есть следующий файл go.mod
. Я не могу запустить модуль, так как компилятор VSCode просит меня запустить go mod tidy
. Когда я запускаю go mod tidy
, мой файл go.mod обновляется: версия go меняется с 1.19
на 1.21
и добавляется новая строка toolchain go1.22.1
. go.sum
файл также обновляется.
Такое поведение происходит только у меня, а не у моих коллег (для точно такого же файла go.mod
), что указывает на то, что с моей настройкой что-то не так.
Запуск go mod tidy -go=1.19
выдает следующую ошибку -- go: google.golang.org/[email protected] requires [email protected], but 1.19 is requested
Я не понимаю, почему это происходит и что я могу сделать, чтобы остановить такое поведение.
go.mod
файл:
module product-api
go 1.19
require (
cloud.google.com/go/pubsub v1.37.0
github.com/DataDog/datadog-go/v5 v5.2.0
github.com/fermatcommerce/fermat/go/common v0.0.0-20220906110310-ef66faa0b8db
github.com/fermatcommerce/fermat/go/product-svc v0.0.0-00010101000000-000000000000
github.com/fermatcommerce/fermat/proto/product-service/go v0.0.0-00010101000000-000000000000
github.com/go-chi/chi/v5 v5.0.8
github.com/go-chi/cors v1.2.1
github.com/google/uuid v1.6.0
github.com/lib/pq v1.10.6
github.com/shopspring/decimal v1.3.1
github.com/stretchr/testify v1.8.4
go.uber.org/zap v1.24.0
golang.org/x/exp v0.0.0-20240325151524-a685a6edb6d8
google.golang.org/protobuf v1.34.2
)
require (
cloud.google.com/go v0.112.1 // indirect
cloud.google.com/go/cloudsqlconn v0.5.1 // indirect
cloud.google.com/go/compute/metadata v0.3.0 // indirect
cloud.google.com/go/iam v1.1.6 // indirect
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/Microsoft/go-winio v0.5.2 // indirect
github.com/Microsoft/hcsshim v0.9.4 // indirect
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
github.com/containerd/cgroups v1.0.4 // indirect
github.com/containerd/containerd v1.6.8 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/docker/distribution v2.8.1+incompatible // indirect
github.com/docker/docker v20.10.17+incompatible // indirect
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.2 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgx/v4 v4.17.0 // indirect
github.com/jackc/pgx/v5 v5.5.2 // indirect
github.com/jackc/puddle/v2 v2.2.1 // indirect
github.com/magiconair/properties v1.8.6 // indirect
github.com/moby/sys/mount v0.3.3 // indirect
github.com/moby/sys/mountinfo v0.6.2 // indirect
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect
github.com/opencontainers/runc v1.1.3 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rogpeppe/go-internal v1.12.0 // indirect
github.com/sirupsen/logrus v1.8.1 // indirect
github.com/testcontainers/testcontainers-go v0.15.0 // indirect
go.opencensus.io v0.24.0 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
go.opentelemetry.io/otel v1.24.0 // indirect
go.opentelemetry.io/otel/metric v1.24.0 // indirect
go.opentelemetry.io/otel/trace v1.24.0 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.9.0 // indirect
golang.org/x/crypto v0.23.0 // indirect
golang.org/x/net v0.25.0 // indirect
golang.org/x/oauth2 v0.20.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.20.0 // indirect
golang.org/x/text v0.15.0 // indirect
golang.org/x/time v0.5.0 // indirect
google.golang.org/api v0.169.0 // indirect
google.golang.org/genproto v0.0.0-20240213162025-012b6fc9bca9 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect
google.golang.org/grpc v1.65.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
go env
возвращает следующее
GO111MODULE=''
GOARCH='arm64'
GOBIN=''
GOCACHE='/Users/tanmay/Library/Caches/go-build'
GOENV='/Users/tanmay/Library/Application Support/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFLAGS=''
GOHOSTARCH='arm64'
GOHOSTOS='darwin'
GOINSECURE=''
GOMODCACHE='/Users/tanmay/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='darwin'
GOPATH='/Users/tanmay/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/opt/homebrew/Cellar/go/1.22.1/libexec'
GOSUMDB='sum.golang.org'
GOTMPDIR=''
GOTOOLCHAIN='local'
GOTOOLDIR='/opt/homebrew/Cellar/go/1.22.1/libexec/pkg/tool/darwin_arm64'
GOVCS=''
GOVERSION='go1.22.1'
GCCGO='gccgo'
AR='ar'
CC='cc'
CXX='c++'
CGO_ENABLED='1'
GOMOD='/Users/tanmay/Desktop/fermat/go/product-api/go.mod'
GOWORK=''
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
PKG_CONFIG='pkg-config'
GOGCCFLAGS='-fPIC -arch arm64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -ffile-prefix-map=/var/folders/tk/g6yl6ybj5gz764nfsh8zrfh00000gn/T/go-build2365762375=/tmp/go-build -gno-record-gcc-switches -fno-common'
Запуск
go mod tidy -go=1.19
выдает следующую ошибку:go: google.golang.org/[email protected] requires [email protected], but 1.19 is requested
Кажется, это самоочевидно: вам понадобится как минимум Go 1.21 для google.golang.org/grpc 1.65.0 . Обновите необходимую версию Go как минимум до 1.21 или понизьте версию пакета. 1.64.1 — последняя версия, совместимая с Go 1.19. См. также примечания к выпуску и выпуск 7250.
Такое поведение происходит только у меня, а не у моих коллег (для того же файла go.mod), что указывает на то, что с моей настройкой что-то не так.
Это изменение было введено в go 1.21:
Итак, ваши коллеги используют более старую версию Go.
Я не понимаю, почему это происходит и что я могу сделать, чтобы остановить такое поведение.
Обновите все компиляторы Go до последней версии:
Каждый основной выпуск Go поддерживается до тех пор, пока не появятся два новых основных выпуска.
Таким образом, хотя Go 1.20 технически все еще поддерживается, ожидается, что Go 1.23 будет выпущен в августе 2024 года, и поддержка будет прекращена.
This change was introduced with go 1.21: The go line must be greater than or equal to the go line of all dependencies. So your colleagues are using an older version of Go.
Я не понял: когда вы говорите, что мои коллеги используют более старую версию Go, что вы имеете в виду? Вы хотите сказать, что версия go, которую они установили в своей системе локально, — это что-то вроде 1.19? Но это не должно иметь значения, верно? Разве не в этом весь смысл файла go.mod
? Кроме того, какие разные вещи происходили до версии 1.21 файла go in go.mod
?
Если у ваших коллег установлен Go 1.20 (все еще поддерживается), они не будут проверять «Линия перехода должна быть больше или равна строке перехода всех зависимостей». В новых версиях может быть строка Toolchain, которая автоматически загружает новые версии, но все это доступно только начиная с Go 1.21. В более старых версиях вы отвечали за выполнение требований к зависимостям и не проверяли автоматически, они только проверяли, достаточна ли ваша установленная версия для корневого модуля.
Они используют версию go 1.19. Но тогда этот модуль у них не должен работать успешно, верно? поскольку требования к версии не соблюдены? Но модуль (product-api) у них работает успешно
Ничто не гарантирует, что их программа работает, но и ничто не гарантирует, что она немедленно выйдет из строя. Большинство изменений очень незначительны, см. «Обратная совместимость, Go 1.21 и Go 2 » и « Go, обратная совместимость и GODEBUG ». TL;DR: Вы находитесь на непроверенной территории, и когда разработчики пакета устраняют совместимость старой версии, они не будут сразу менять весь код. Теперь вы получите другую случайную реализацию, которая может повлиять или не повлиять на ваш код.
google.golang.org/[email protected] requires [email protected], but 1.19 is requested
, попробуйте более старую версию, например v1.40.0.