Go语言包管理-gomod包管理下的巨坑(踩雷经验)

学习Go有很长一段时间了,一直诟病的就是Go的包管理机制,
感觉好像从来没有真正学明白这个东西,总的来说就是踩一个坑避一个坑吧。
——————————————————————————————————————————————————————————

GoPath包管理模式

GOROOT:就是Go的安装目录(C:\Go),(类似于java的JDK),里面有bin目录(C:\Go\bin)
GOPATH: 是我们的工作空间,保存go项目代码和第三方依赖包 (可在环境变量设置,我这里改到C盘下了,默认F:\Go用户目录下)

GOPATH可以设置多个,其中,第一个将会是默认的包目录,使用go get下载的包都会在第一个path中的src目录下,使用go install时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件

使用GOPATH时,Go会在以下为目录中搜索包:
GOROOT/src:Go标准库
GOPATH/src:应用自身代码和第三方依赖的代码

go env -w GO111MODULE=off (将配置更改为使用GoPath的命令)
即在配置中把GO111MODULE的值改为off
go env 查看配置项(包含ROOT,PATH等)

坑!!!!!使用这种模式所有文件都要放在GOPATH/src的目录下,要不找不到!

——————————————————————————————————————————————————————————

GoMod包管理模式

通常情况选我们的项目不会去特意放在目录下,Go就引入了一个GoMod的东西,也叫包管理工具

当我们在新建一个项目后,要使用
go mod init <项目名>
的方式去先创建一个包管理模板
![在这里插入图片描述](https://img-blog.csdnimg.cn/19cb346e4c3d419ba3e54399cc4e1638.png

这是目前我的包结构:
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第1张图片
我们休要执行如下命令
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第2张图片

可见出现了一个go.mod文件
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第3张图片
module AA
记住这个东西,从此你再AA目录下创建的包就可以引入了,当然仅限AA目录下使用。
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第4张图片
现在我们尝试引入

第一个小细节

Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第5张图片

你会发现,报错?
为什么呢?
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第6张图片
换成小写,正常了。。
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第7张图片
CC就可以用大写
这是因为我的BB.go是package bb
而CC.go是package CC
一个小细节就可能让你研究很久!

第二个小细节

在引入包的时候要引入的是对应包的目录,而不是具体的文件!
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第8张图片
而在具体.go文件的内部
Go语言包管理-gomod包管理下的巨坑(踩雷经验)_第9张图片
函数名为大写代表可以引用,也就是公有。
函数名为小写则只有本包可以调用,也就是私有。
变量的定义也一样。

本文章持续积累关于Go包管理的相关问题,欢迎喜欢Go的朋友留言讨论,指导!

你可能感兴趣的:(go黑帽子,golang)