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


img


后面跟的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中的第一行就行,然后之后再调用其中的文件夹

运行的话,也就没什么问题

本人的理解和使用大概就是这样,欢迎大家来批评指正!!!