go.mod 上的严格版本

Strict version on go.mod

我在 go.mod 文件中的依赖项总是更新,我不知道为什么。我有 go.mod 这样的

module mymodule

go 1.14

require (
    github.com/golang/protobuf v1.3.5
    github.com/grpc-ecosystem/grpc-gateway v1.14.6
    github.com/jinzhu/gorm v1.9.15
    github.com/kelseyhightower/envconfig v1.4.0
    github.com/ruang-guru/rg-genproto v1.0.18
    gitlab.com/ruangguru/source/shared-lib/go v1.0.28
    google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884
    google.golang.org/grpc v1.29.1
)

当我 运行 go get 它总是变成这个。参见 github.com/golang/protobuf 从 1.3.5 到 1.4.1

require (
    github.com/golang/protobuf v1.4.1
    github.com/gomodule/redigo v2.0.0+incompatible
    github.com/grpc-ecosystem/grpc-gateway v1.14.6
    github.com/jinzhu/gorm v1.9.15
    github.com/kelseyhightower/envconfig v1.4.0
    github.com/ruang-guru/rg-genproto v1.0.18
    github.com/stretchr/testify v1.5.1
    gitlab.com/ruangguru/source/shared-lib/go v1.0.28
    google.golang.org/genproto v0.0.0-20200808173500-a06252235341
    google.golang.org/grpc v1.29.1
    google.golang.org/protobuf v1.25.0 // indirect
)

所以我的问题是我们如何在 go.mod 中设置特定版本而不在 运行 go get 时更改它?如果这个问题很基础,我很抱歉,因为我对这个 go.mod 还是陌生的:(

如果你的 git 包有 tag 版本,你可以使用这个命令:

go get -d -v github.com/golang/protobuf@v1.3.5
  • -d表示“只下载”,如果你想直接安装,省略这个标志和这一行下面的构建命令。
  • -v 表示“冗长”。