Go path自定义项目路径包依赖的问题

go的项目现在基本全是go module模式,快捷方便的包依赖和版本管理,但有时候碰到一些老项目需要维护,依然是go path模式,这种古老的模式对一些新学者可能一知半解就直接选择了go module,对老学者可能早已被遗忘,由此记录一下。

一、全局环境路径介绍

GOROOT=C:/go

1、goroot/src下是go本身的包。

2、go mod模式下,gopath/pkg/mod/找不到的包也会从root/src路径查找

3、go path模式下,gopath/src/里面不存在的包也会从root/src路径查找

GOPATH=E:/go

1、无论go mod 还是gopath模式,此目录需有。

2、若是go mod模式,第三方依赖包会在此目录下./pkg/mod下,如下图:

3、若是go path模式,第三方依赖包会在此目录下./src下,如下图:

二、go path模式下的项目布署

go mod的代码可以随意安放,这是相对gopath一个方便的地方,无论项目代码放在哪里,依赖的包都如上所说,都在gopath/pkg/mod下,是绝对路径包含。

但go path的一般说法,gopath的项目代码,需要放在gopath/src目录下,它是对gopth/src的相对包含,这里会引出一个问题,如果我有两个项目,都有lib的包,如果代码都丢在gopath/src目录下,代码不是混在一起了吗?

显然解决方法是有的,如下,我想把项目放在随便一个目录E:/marketwork下,终端执行git clone xxxx src,将git代码clone下来到该目录的src目录下(src不用手动创建)

1、解决项目本身的包依赖问题:

完了会发现本地包含的包有问题,因为都从全局的gopath/src去包含了,而你的代码不在gopath/src下。

如何解决?以golang为例,设置项目的go path即可,如下图:

2、解决github包依赖问题:

设置好后,本地包含问题已解决,项目本身包含已经是绿色,重新打开ide的terminal,run一下发现第三方github的依赖包有问题

这个时候,如果你直接在该终端下执行go get github.com/xxxxxxx,会发现包下载在当前目录下了,这会有什么问题呢?对本项目是没有问题的,因为上面图看出,设置了项目的gopath,它在全局的gopath和goroot找不到的包,最终还会到项目的gopath去找这个包。

但这样会造成包文件的重复冗余,因为github上的包,很多项目本来可能是共用的,每个项目自己目录下一份没必要。而且下到全局的gopath/src下,以后别的项目用到,就直接能查找到,就不会再下载了,那如何把github上的包下到全局的gopath/src呢?

其实很简单,另外开一个终端,将当前终端的gopath环境变更设置为只有全局的,再go get xxxx,就是下载到全局的gopath/src下,所以在gopath模式下,go get 下载的包在什么目录,取决于当前终端设置的go环境变量GOPATH的目录是什么。

如图,下载的包在全局gopath下
本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Go path自定义项目路径包依赖的问题
go的项目现在基本全是go module模式,快捷方便的包依赖和版本管理,但有时候碰到一些老项目需要维护,依然是go path模式,这种古老的模式对一些新学者可...
<<上一篇
下一篇>>