Go module和Go workspace
本人也是刚学习Golang的菜鸟,下面的内容都是以一个菜鸟的视角写的,方便本人复习使用,如果能帮到广大的互联网朋友,不胜荣幸,如果有地方有误,还请大佬斧正!!!
作为一个学习Golang语言的新手,网上的教程比较混乱,本人下载的Golang版本是go1.19.4 windows/amd64
一开始写代码的时候总是被go.mod文件和go.work文件整的非常迷茫,翻阅了很多资料后,有以下学习总结,方便各位查阅,节省实践
本文主要的参考为以下两个教学视频:
Golang的环境配置
在我们下载好Golang后,我们一般要配置Golang的环境变量,GOROOT,GOPATH,和将go中的bin目录放到环境变量中,方便我们在任何地方都能使用go命令。基本的环境变量配置网上有很多就不在这里赘述了。
但是随着Go语言的发展,现在已经不需要再配置GOPATH环境变量,以前需要配置这个的时候要将所有的开发文件放到该文件夹目录下,不像C和Java随处可放置,随处可开发编译
新版本中Golang中,可以将开发文件放置于任何地方,但是需要配置go.mod文件和go.work文件
Go module和Go workspace
首先说go.mod文件
下面的内容本人参考了①https://zhuanlan.zhihu.com/p/482014524②https://zhuanlan.zhihu.com/p/126561786③http://c.biancheng.net/view/5712.html
如果想了解更详细的内容,请浏览上面三个网址
①配置使用go module的环境
首先如果想使用go module来管理依赖包(所谓的依赖包就是别人写好的代码,方便自己调用,java中的maven就是干这个事情的,再或者python中的anaconda也是用来管理依赖包的),首先要将Go中的环境设置好
第一行命令说的是使用Go Module来管理依赖,
第二行命令是更换镜像代理,由于墙的原因,我们需要更换代理,这样在用go get的时候速度更快
②简要介绍go.mod文件和简单的操作
我们上面是将GO111MODULE启用了on,这个意思是会忽略GOPATH文件夹,只根据go.mod下载依赖,也就是说,项目只会根据go.mod中的内容下载对应的依赖,下载到哪里呢?下载到GOPATH文件夹的pkg文件夹中,有的人会问我没有设置GOPATH环境变量呀!!!请小伙伴们用go env命令检查一下就会发现,即使我们没有设置GOPATH,系统帮我们自动设置了一个GOPATH,在windows中,应该是放到了用户目录下了,详细地就查询一下就知道了
假如说我们的工作区为C:\wintercode\go\goWeb,我们想在这里建立好多好多项目
假如说我们想建一个项目叫helloWorld,就用命令 mkdir helloWorld 当然直接手动创建文件夹也行
cd helloWorld后,使用命令
这个moduleName根据自己的情况设置,一般情况下我们就可以设置成文件名称,也就是
这个时候就会在helloWorld文件夹下生成一个go.mod文件,内容是这样的
下载依赖库
方法一:用go get命令下载依赖库
第一行是刚才创建的名称,下面那一行是go语言版本,假如我们现在要安装Gin依赖,我们就可以使用go get命令
然后我们的cmd应该就有下面的反应(具体的情况根据版本而定)
这个-u的意思是强制使用网络去更新包和它的依赖包,所有的参数如下,资料来源http://c.biancheng.net/view/123.html
后面跟的http://github.com/gin-gonic/gin如上图可对应关系,一般在工作中,就用这种方式抓取远程目录
完成了之后,我们可以看到,项目中的go.mod文件发生了更改,如下
然后我们可以创建一个main文件夹,然后在里面写一个main.go文件
正常情况下就直接开始运行了
然后我们在GOPATH文件夹中的pkg文件夹中的mod文件夹中也可以找到我们下载的库文件
可以说非常的方便
方法二:直接修改go.mod文件
或者我们不用go get命令,我们直接在go.mod中添加require命令也可以,如下
常用的命令有如下几种
modulerequirereplaceexclude写好命令后运行go mod tidy,程序会自动增加缺少的包,删除无用的包
实际的效果就不放在上面了大家可以自己动手试一试
go mod命令也有很多中,如下
| 命令 | 作用 |
|---|---|
| go mod download | 下载依赖包到本地(默认为 GOPATH/pkg/mod 目录) |
| go mod edit | 编辑 go.mod 文件 |
| go mod graph | 打印模块依赖图 |
| go mod init | 初始化当前文件夹,创建 go.mod 文件 |
| go mod tidy | 增加缺少的包,删除无用的包 |
| go mod vendor | 将依赖复制到 vendor 目录下 |
| go mod verify | 校验依赖 |
| go mod why | 解释为什么需要依赖 |
再说go.work文件
这是go 1.18版本的新功能,创建工作区
程序员们有的时候同时承担了不同模块的开发工作,有的时候,不同模块还要调用不同模块的函数或者方法
这个时候workspace新功能就能方便我们调用不同模块的函数或者方法
之前程序员们可能要用go.mod文件中的replace命令,将库的名称更改到本地,再来调用,很麻烦,视频https://www.bilibili.com/video/BV1ui4y1U7W6/?spm_id_fro&vd_source=340cb6e00d45c85d70810b3b442eeab5
就介绍了workspace出现之前的方法比较麻烦,现在新方法出现了,就是这个视频中的方法:https://www.bilibili.com/video/BV1eY411c7oH/?spm_id_from=333.999.0.0&vd_source=340cb6e00d45c85d70810b3b442eeab5
首先我们cd到工作区,也就是之前设立的C:\wintercode\go\goWeb,在这里我们建立一个工作区
这个时候会生成一个go.work文件
当我们要工作的时候,假如我们要编辑任何一个module项目,就使用命令
将项目文件夹添加到了工作区,假如这个时候,我们helloWord的main.go文件要调用另一个项目helloGolang中的util.go中的函数,这里给大家看一下我的文件夹结构
可以看到,helloGolang中的go.mod文件已经创建好了,里面的内容是这样的
然后我们使用命令
将其添加到工作区中,这个时候我们的go.work文件变成了这样
如果我们想删掉一个,使它去除我们的工作区,我们可以用这个命令
当然命令很多,用go work help可以找自己需要的命令
尝试调用
注意,调用的时候一定要著名另一个模块的根目录也就是这个:http://testGolang.com/helloGolang
别管前面的http://testGolang.com是什么,直接照抄它go.mod中的第一行就行,然后之后再调用其中的文件夹
运行的话,也就没什么问题
本人的理解和使用大概就是这样,欢迎大家来批评指正!!!