Golang离线环境安装第三方包后无法正常使用该如何解决?
Go离线环境安装第三方包解决方案
以下方案可以实现和在线go get完全一致的使用效果,适配不同Go版本场景:
使用Go Modules(Go 1.11+ 推荐方案)
- 第一步:在离线项目根目录执行
go mod init 你的项目模块名,如果项目已经初始化过Go Modules可直接跳过该步骤 - 第二步:将获取到的第三方包源码按照导入路径结构存放到离线环境的统一目录,例如统一存放根目录为
/opt/go_offline_pkgs,若导入包为github.com/gin-gonic/gin,则最终存放路径为/opt/go_offline_pkgs/github.com/gin-gonic/gin - 第三步:在项目的
go.mod文件末尾添加依赖替换规则,格式为replace 包官方导入路径 => 本地源码存放绝对路径,示例如下:replace github.com/gin-gonic/gin => /opt/go_offline_pkgs/github.com/gin-gonic/gin - 第四步:在项目根目录执行
go mod tidy或者go get 包导入路径@对应版本号,Go会直接读取本地源码完成依赖引入,不需要拉取线上资源
使用GOPATH模式(Go 1.11之前旧版本适用)
- 第一步:执行
go env GOPATH确认环境变量GOPATH的配置路径 - 第二步:将第三方包源码按照导入路径结构,直接放入
$GOPATH/src目录下,例如github.com/gin-gonic/gin最终存放路径为$GOPATH/src/github.com/gin-gonic/gin - 第三步:直接在项目代码中导入对应包路径即可,Go会自动从GOPATH目录下检索匹配的包
注意事项:
- 导入的源码需要确保版本和依赖完整,建议在线上环境拉取对应版本的全量源码后再整体拷贝到离线环境,避免出现依赖缺失、版本不匹配的问题
- 如果第三方包存在多级依赖,需要将所有关联依赖的源码都按照上述规则导入到离线环境
- 若需要全局使用第三方包提供的可执行工具(例如代码检查、文档生成工具等),进入对应包的根目录执行
go install,生成的二进制文件会自动存放到$GOPATH/bin目录,将该目录加入系统PATH环境变量即可全局调用
内容的提问来源于stack exchange,提问作者hibiki moritsuka
相关产品推荐
相关产品推荐

