Golang中如何获取指定版本的包

Golang中如何获取指定版本的包 假设我想获取 grpc 包及其所有依赖项,我会执行:

go get -u google.golang.org/grpc

但这样做总是会获取最新的软件包。我希望能够获取特定版本的软件包。使用 go get -u google.golang.org/grpc@1.2.0 这种方式是行不通的。我知道在获取上述软件包后,可以进入下载的包目录执行 git checkout v1.2.0。只是想确认是否有更好的方法。

2 回复

我认为这个Stack Overflow问题列出了一些相当不错的方法:
https://stackoverflow.com/questions/24855081/how-do-i-import-a-specific-version-of-a-package-using-go-get

更多关于Golang中如何获取指定版本的包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go语言中,从Go 1.11版本开始引入了模块支持,使得管理依赖版本变得更加直接。你可以使用go get命令并指定版本号来获取特定版本的包。以下是正确的方法:

  1. 确保启用Go模块:如果你的项目尚未启用模块,可以在项目目录下运行go mod init <module-name>来初始化模块。

  2. 使用go get指定版本:通过@符号后跟版本号来获取特定版本。对于你的示例,获取grpc包的v1.2.0版本,命令如下:

    go get google.golang.org/grpc@v1.2.0
    

    注意:版本号前通常需要添加v前缀(如v1.2.0),这与Git标签一致。如果版本标签是1.2.0,则使用@1.2.0

  3. 更新go.mod文件:执行上述命令后,Go会自动更新项目的go.mod文件,将依赖锁定到指定版本。例如:

    // go.mod 文件示例
    module your-module-name
    
    go 1.21
    
    require google.golang.org/grpc v1.2.0
    
  4. 验证依赖:运行go mod tidy来清理未使用的依赖并同步版本:

    go mod tidy
    

如果go get -u google.golang.org/grpc@1.2.0无效,可能是因为版本格式不正确。请检查包的GitHub仓库(如https://github.com/grpc/grpc-go)中存在的标签,确认版本号格式。例如,如果标签是v1.2.0,则必须使用@v1.2.0

示例完整步骤:

# 初始化模块(如果未初始化)
go mod init example/project

# 获取特定版本
go get google.golang.org/grpc@v1.2.0

# 整理依赖
go mod tidy

这种方法避免了手动使用git checkout,并利用Go模块系统自动管理版本。如果遇到网络问题,可以设置代理(如GOPROXY=https://goproxy.cn)来加速下载。

回到顶部