前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go path自定义项目路径包依赖的问题

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

原创
作者头像
恒恒
修改2021-04-21 17:09:40
4.2K0
修改2021-04-21 17:09:40
举报
文章被收录于专栏:恒恒的专栏恒恒的专栏

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下
如图,下载的包在全局gopath下

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、全局环境路径介绍
  • 二、go path模式下的项目布署
    • 1、解决项目本身的包依赖问题:
      • 2、解决github包依赖问题:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档