如何解决离线环境下golang开发时依赖的问题?
Go
在联网环境下开发可以使用go mod tidy
联网拉取项目所需依赖包,而离线环境下,本人了解到,只能单个项目中使用vendor
解决包依赖,但是一旦该项目导入包有变化就会失效。而且vendor
仅对当前项目有效,其他项目不能引用vendor
中的包。这导致离线环境的Go
开发寸步难行。往往用Go
卡在这里后,我就只能转用Python
在离线内网开发。
想请教大佬们
- 如何在内网(不能连互联网)搭建
goproxy
服务,让新旧项目都能重复共享使用特定的包. - 其所需的包如何下载和转移至内网.
- 如何解决
sum
的问题等等?越详细越好。
网上关于Google
官方的goproxy
和goproxy.io
搭建goproxy
服务的文章,都是基于能联网的公司内网场景。
回复
1个回答
test
2024-06-24
Online
端:
- 新建项目目录及
go
文件,将需要移植到内网的依赖包的包名(import (_ "github.com/tidwall/gjson").....
)写入go
文件中。 - 然后利用
go mod vendor
命令,将依赖包打包到当前项目所在目录。 - 将当前项目目录下的
vendor
目录、go.mod
及go.sum
三个东西拷贝到离线电脑中。
Offline
端
新建项目目录 offline_project
(该名字为举例,实际随意),将前面第三步拷贝的三个东西拷贝进来,新建 go
文件,需要用到什么包就导入什么包 (如果导入的是第三方包前提是该包已经打包进了 vendor 目录中)
注意事项 在 Offline
端, import
的包如果只是 vendor
中的个别包,则 go.mod
和 go.sum
可能会出现红点,此时千万不要使用 go mod
命令去整理,不要担心编译时会将 vendor 中的依赖包全部编译进去。
如何复用
要复用移植的第三方包,先将项目目录 offline_project
中除 vendor
、 go.mod
、 go.sum
之外原有的项目文件(主要是 go
文件)移出当前目录或者更改后缀,然后再新建 go
文件。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容