Файл go.mod обновляется при запуске go mod tidy

У меня есть следующий файл 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'
google.golang.org/[email protected] requires [email protected], but 1.19 is requested, попробуйте более старую версию, например v1.40.0.
SimonLi 24.07.2024 10:20
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Запуск 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?
10may 24.07.2024 16:24

Если у ваших коллег установлен Go 1.20 (все еще поддерживается), они не будут проверять «Линия перехода должна быть больше или равна строке перехода всех зависимостей». В новых версиях может быть строка Toolchain, которая автоматически загружает новые версии, но все это доступно только начиная с Go 1.21. В более старых версиях вы отвечали за выполнение требований к зависимостям и не проверяли автоматически, они только проверяли, достаточна ли ваша установленная версия для корневого модуля.

eik 24.07.2024 17:46

Они используют версию go 1.19. Но тогда этот модуль у них не должен работать успешно, верно? поскольку требования к версии не соблюдены? Но модуль (product-api) у них работает успешно

10may 24.07.2024 18:13

Ничто не гарантирует, что их программа работает, но и ничто не гарантирует, что она немедленно выйдет из строя. Большинство изменений очень незначительны, см. «Обратная совместимость, Go 1.21 и Go 2 » и « Go, обратная совместимость и GODEBUG ». TL;DR: Вы находитесь на непроверенной территории, и когда разработчики пакета устраняют совместимость старой версии, они не будут сразу менять весь код. Теперь вы получите другую случайную реализацию, которая может повлиять или не повлиять на ваш код.

eik 24.07.2024 19:00

Другие вопросы по теме