探究GoPath和GoModuld的区别
自从go语言引入的gomod之后,我们需要区分一下
1.使用GoPath需要将go111module设置为off,这样在去导包的时候就从%goroot%/src
与%gopath%/src下面根据导包的路径去查找包
那么这种情况下你任何文件导入的每一个包都得去这两个目录下去找一遍,即使说你现在想导入
当前项目其它目录下的包,你也得从头开始一点点的写这个路径,就想下面这里的导入app一样,
你得从头开始写,而且我们还得注意到一点就算你这个项目必须得建立在GoPath下面了(下面
这个项目的路径是E:\GoWork\src\go.introduce\chapter02\code05,我的GoPath是
E:\GoWork),同时在这种情况下你去go get下来的包也会放在gopath/src下面
2.当开启了go111moudle之后,如果你设置为auto,那么就得分下面几种情况来讨论了:
2.1 你的项目在GoPath的src之外或者你为你的项目使用了go.mod,那么他就是on
2.2 如果你的项目在GoPath之内且没有使用go.mod那么就是等同于off,如果使用了
go.mod文件那么就是on
如果显示的设置为on或者off,那么就是on或者off了,对于on的情况而言,我们导包路径就是在
GoPath/pkg/mod/....找了,如果使用了go get 也是会下载到这个包里面来,同样对于开启
MODULE的项目而言,导入自己本项目的包的方式就是从go.mod所在的目录出发然后写到你要导
入的那个包所在的目录即可,如下面第二张图片所示(这里下面这个图片的code05是和go mod
init时命名的名字一样,如果你命名时写的code0hhash,那么你下面就应该写code0hhash,
这个时候code0hhash依然代表code05这个目录(实际的物理目录)),当完成代码编写后,在
此时执行项目会生成一个go.sum文件,这个文件的具体含义主要是来做检测的
(当然开启了MODULE后正常的fmt这类的还是在goroot)
3.关于写道对应包路径后由于包名和文件所在目录不一致的问题,去看下面第三张图
接下来既然我们已经来到了GoMODULE的时代,我们就用GoMODULE就行了,那么下面我们来一个案例展示如何将我们自己的包上传到github上作为第三方包使用。