如何解决离线环境下golang开发时依赖的问题?

作者站长头像
站长
· 阅读数 8

Go在联网环境下开发可以使用go mod tidy联网拉取项目所需依赖包,而离线环境下,本人了解到,只能单个项目中使用vendor解决包依赖,但是一旦该项目导入包有变化就会失效。而且vendor仅对当前项目有效,其他项目不能引用vendor中的包。这导致离线环境的Go开发寸步难行。往往用Go卡在这里后,我就只能转用Python在离线内网开发。

想请教大佬们

  1. 如何在内网(不能连互联网)搭建goproxy服务,让新旧项目都能重复共享使用特定的包.
  2. 其所需的包如何下载和转移至内网.
  3. 如何解决sum的问题等等?越详细越好。

网上关于Google官方的goproxygoproxy.io搭建goproxy服务的文章,都是基于能联网的公司内网场景。

回复
1个回答
avatar
test
2024-06-24

Online 端:

  1. 新建项目目录及 go 文件,将需要移植到内网的依赖包的包名(import (_ "github.com/tidwall/gjson").....)写入 go 文件中。
  2. 然后利用 go mod vendor 命令,将依赖包打包到当前项目所在目录。
  3. 将当前项目目录下的 vendor 目录、 go.modgo.sum 三个东西拷贝到离线电脑中。

Offline

新建项目目录 offline_project (该名字为举例,实际随意),将前面第三步拷贝的三个东西拷贝进来,新建 go 文件,需要用到什么包就导入什么包 (如果导入的是第三方包前提是该包已经打包进了 vendor 目录中)

注意事项Offline 端, import 的包如果只是 vendor 中的个别包,则 go.modgo.sum 可能会出现红点,此时千万不要使用 go mod 命令去整理,不要担心编译时会将 vendor 中的依赖包全部编译进去。

如何复用

要复用移植的第三方包,先将项目目录 offline_project 中除 vendorgo.modgo.sum 之外原有的项目文件(主要是 go 文件)移出当前目录或者更改后缀,然后再新建 go 文件。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容