包(package)是多个Go 源码的集合,是一种高级的代码复用方案,Go 语言为我们提供了很多内置包,如fmt、strconv、strings、sort、errors、time、encoding/json、os、io等。
Golang 中的包可以分为三种:
1、系统内置包。
2、自定义包。
3、第三方包。
系统内置包: Golang 语言给我们提供的内置包,引入后可以直接使用,如fmt、strconv、strings、sort、errors、time、encoding/json、os、io等。
自定义包:开发者自己写的包。
第三方包:属于自定义包的一种,需要下载安装到本地后才可以使用,如前面给大家介绍的"github.com/shopspring/decimal"包解决float精度丢失问题。
在Golang1.11 版本之前如果我们要自定义包的话必须把项目放在GOPATH 目录。
Go1.11 版本之后无需手动配置环境变量,使用go mod 管理项目,也不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目, Go1.13 以后可以彻底不要GOPATH了。
1、go mod init 初始化项目实际项目开发中我们首先要在我们项目目录中用 go mod 命令生成一个go.mod 文件管理我们项目的依赖。
比如我们的golang 项目文件要放在了itying 这个文件夹,这个时候我们需要在itying 文件夹里面使用go mod 命令生成一个go.mod 文件。



包(package)是多个Go 源码的集合,一个包可以简单理解为一个存放多个.go 文件的文件夹。
该文件夹下面的所有go 文件都要在代码的第一行添加如下代码,声明该文件归属的包。
package 包名注意事项:
-符号。如果想在一个包中引用另外一个包里的标识符(如变量、常量、类型、函数等)时,该标识符必须是对外可见的(public)。
在Go 语言中只需要将标识符的首字母大写就可以让标识符对外可见了。
1.1、定义一个包名为 calc 的包代码如下:E:\golang\src\pkg\calc\calc.go
创建文件夹:pkg\calc,创建文件:calc.go。
package calc
//首字母大小表示公有,首字母小写表示私有
var a = 100 //私有变量
var Age = 20 //公有变量
func Add(x, y int) int {return x + y
}
func Sum(x, y int) int {return x - y
}1.2、main.go 中引入这个包访问一个包里面的公有属性方法的时候需要通过包名称.去访问。
package main
import (
"fmt"
"one/main/src/pkg/calc"
)
func main() {c := calc.Add(10, 20)
fmt.Println(c)
}running...
30
单行导入
单行导入的格式如下:
import "包1"
import "包2"多行导入
多行导入的格式如下:
import (
"包1"
"包2"
)匿名导入包
如果只希望导入包,而不使用包内部的数据时,可以使用匿名导入包。
具体的格式如下:
import _ "包的路径"匿名导入的包与其他方式导入的包一样都会被编译到可执行文件中。
自定义包名
在导入包名的时候,我们还可以为导入的包设置别名。
通常用于导入的包名太长或者导入的包名冲突的情况。
具体语法格式如下:
import 别名 "包的路径"单行引入定义别名:
import c "itying/calc"多行引入定义别名:
import (
"fmt"
c "itying/calc"
)
init() 函数介绍
在Go 语言程序执行时导入包语句会自动触发包内部 init()函数的调用。
需要注意的是: init() 函数没有参数也没有返回值。
init()函数在程序运行时自动被调用执行,不能在代码中主动调用它。
包初始化执行的顺序如下图所示:

init()函数执行顺序
Go 语言包会从main 包开始检查其导入的所有包,每个包中又可能导入了其他的包。
Go 编译器由此构建出一个树状的包引用关系,再根据引用顺序决定编译顺序,依次编译这些包的代码。
在运行时,被最后导入的包会最先初始化并调用其init()函数, 如下图示:

我们可以在 https://pkg.go.dev/ 查找看常见的 golang 第三方包。
1、找到我们需要下载安装的第三方包的地址比如前面给大家演示的解决 float 精度损失的包decimal。
https://github.com/shopspring/decimal
第一种方法:go get 包名称(全局)
go get github.com/shopspring/decimalPS E:\golang\src>go get github.com/shopspring/decimal
go: downloading github.com/shopspring/decimal v1.3.1
go: added github.com/shopspring/decimal v1.3.1
PS E:\golang\src>查看包安装路径:
go env
以下即是go的包安装路径
set GOPATH=C:\Users\Administrator\go
第二种方法:go mod download (全局)
package main
import (
"fmt"
"github.com/shopspring/decimal"
)
func main() {quantity := decimal.NewFromInt(3)
fmt.Println(quantity)
}运行命令
go mod download
go run .\main.go 或者 go install赖包会自动下载到 $GOPATH/pkg/mod,多个项目可以共享缓存的mod,注意使用 go mod download 的时候首先需要在你的项目里面引入第三方包。
第三种方法:go mod vendor 将依赖复制到当前项目的 vendor 下(本项目)
go mod vendor
将依赖复制到当前项目的 vendor 下。
注意:使用 go mod vendor 的时候首先需要在你的项目里面引入第三方包。
3、看文档使用这个包包安装完毕后我们就可以看文档使用这个包了…
示例下载 gjson 包


PS E:\golang\src>go get -u github.com/tidwall/gjson
go: downloading github.com/tidwall/gjson v1.14.4
go: downloading github.com/tidwall/pretty v1.2.0
go: downloading github.com/tidwall/match v1.1.1
go: downloading github.com/tidwall/pretty v1.2.1
go: added github.com/tidwall/gjson v1.14.4
go: added github.com/tidwall/match v1.1.1
go: added github.com/tidwall/pretty v1.2.1
PS E:\golang\src>
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧