学习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.mod文件
module AA
记住这个东西,从此你再AA目录下创建的包就可以引入了,当然仅限AA目录下使用。
现在我们尝试引入
第一个小细节
你会发现,报错?
为什么呢?
换成小写,正常了。。
CC就可以用大写
这是因为我的BB.go是package bb
而CC.go是package CC
一个小细节就可能让你研究很久!
第二个小细节
在引入包的时候要引入的是对应包的目录,而不是具体的文件!
而在具体.go文件的内部
函数名为大写代表可以引用,也就是公有。
函数名为小写则只有本包可以调用,也就是私有。
变量的定义也一样。
本文章持续积累关于Go包管理的相关问题,欢迎喜欢Go的朋友留言讨论,指导!