一、GoLang 中包的介绍和定义
- 包(package)是多个 Go 源码的集合,是一种高级的代码复用方案
- Go 语言为我们提供了很多内置包,如 fmt、strconv、strings、sort、errors、times、encoding/json、os、io 等
- Golang 中的包可以分为三种,1、系统内置包2、自定义包3、第三方包
- 系统内置包
- fmt、strconv、strings、sort、errors、time、encoding/json、os、io 等
- 自定义包
- 开发者自己写的包
- 第三方包
- 属于自定义包的一种,需要下载安装到本地后才可以使用
- 系统内置包
二、GoLang 包管理工具 go mod
- 在 Golang1.11 版本之前如果我们摇自定义包的话必须把项目放在 GOPATH 目录
- Go1.11版本之后无需手动配置环境变量,使用 go mod 管理项目
- 也不需要非得吧项目放到 GOPATH 指定目录下,你可以在你磁盘的任何位置新建一个项目
- Go1.13 以后可以切滴不要 GOPATH 了
1、go mod init 初始化项目
- 实际项目开发中我们首先要在我们项目目录中用 go mod命令生成一个go.mod文件管理我们项目的依赖
- 比如我们的 golang 项目文件要放在了 itying 这个文件夹,这个时候我们需要在 itying 文件里面使用 gomode 命令生产一个 go.mod文件
- go.mod文件一旦创建后,它的内容将会被 go toolchain 全面掌控
- go toolchain 会在各类命令执行时,比如 go get、go build、go mod 等修改和维护 go.mod文件
- go.mod提供了 module,require、replace 和 exclude 四个命令
- module 语句指定包的名字(路径)
- require 语句指定的依赖项模块
- replace 语句可以体会依赖项模块
- exclude 语句可以忽略依赖项模块
2、go mod 常用命令
命令 | 说明 |
download | download modules to local cache(下载依赖包) |
edit | edit go.mod from tools or scripts(编辑go.mod) |
graph | print module requirement graph (打印模块依赖图) |
verify | initialize new module in current directory(在当前目录初始化mod) |
tidy | add missing and remove unused modules(拉取缺少的模块,移除不用的模块) |
vendor | make vendored copy of dependencies(将依赖复制到vendor下) |
verify | verify dependencies have expected content (验证依赖是否正确) |
why | explain why packages or modules are needed(解释为什么需要依赖) |
三、GoLang 中自定义包
- 包(package)是多个 Go 源码的集合,一个包可以简单理解为一个存放多个.go文件的文件夹
- 改文件夹下面的所有 go 文件都要在代码的第一行添加如下代码,声明改文件归属的包
package 包名
1、初始化项目
mkdir Demo
cd Demo
go mod init Demo
2、Demo/calc/calc.go
package mainimport {c "Demo/calc" // c是取的别名"fmt"
}func main() {sum := c.Add(10, 2)fmt.Println(sum) //12sub := c.Sub(10, 2)fmt.Println(sub) // 8
}
func init() { //main包中init函数 优先于 main函数fmt.Println("main init...")
}
/*
main init...
12
8*/
四、init()初始化函数
1、init()函数介绍
- 在 Go 语言程序执行时导入包语句会自动触发包内部 init()函数的调用
- 需要注意的是:init()函数没有参数也没有返回值
- init()函数在程序运行是自动被调用执行,不能在代码中主动调用它
2、init()函数执行顺序
- Go 语言包会从 main 包开始检查其导入的所有包,每个包中又可能导入了其他的包
- Go 编译器由此构建出一个树状的包引用关系,再根据引用顺序决定编译顺序,依次编译这些包的代码
- 在运行时,被最后导入的包会最先初始化并调用奇 inti()函数,如下图示
五、Golang 中使用第三方包
1、查找 golang 的第三方包
- 我们可以在Go Packages - Go Packages查找看常见的 golang 第三方包
2、安装这个包
- 第一种方法:go get 包名称(全局)
go get github.com/shopspring/decimal
- 第二种方法:go mod download (全局)
- 依赖包会自动下载到$GOPATH/pkg/mod,多个项目可以共享缓存的 mod
- 注意使用 go mod download 的上海首先需要在你的项目里面引入第三方包
go mod download
- 第三种方法:go mod vendor 将依赖复制到当前项目的 vendor 在(本项目)
- 将依赖复制到当前项目的 vendor 下
- 注意:使用go mod vendor的时候首先需要在你的项目里面引入第三方包
go mod vendor
3、看文档使用这个包
- 包安装完毕后我们就可以看文档使用这个包了..