Golang 基础值速学之二十(go mod)

一、Golang 中包的介绍和定义

包(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 精度丢失问题。

二、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 文件夹
里面使用 go mod 命令生成一个 go.mod文件

Golang 基础值速学之二十(go mod)

三、Golang 中 init()初始化函数

init()函数介绍
在 Go 语言程序执行时导入包语句会自动触发包内部 init()函数的调用。需要注意的是:init()
函数没有参数也没有返回值。 init()函数在程序运行时自动被调用执行,不能在代码中主动调用它。
包初始化执行的顺序如下图所示:

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

Golang 基础值速学之二十(go mod)

四、go mod

比如我们要在项目当中使用github上的decimal包 如何使用呢?
因为我们已经 go mod init 创建了go.mod文件
然后只需要执行 go get github.com/shopspring/decimal 就完事了 但是毕竟是国外的 你不科学上网可能下载会失败
可以借助goland工具

Golang 基础值速学之二十(go mod)

这里这么写就完事了 不要问为什么 总之能让你下载到国外的东东
然后重启goland 在命令行重新执行 go get github.com/shopspring/decimal 就会下载下来了
然后你再去看go.mod文件里面:

Golang 基础值速学之二十(go mod)
就已经自动给你集成进来了!很类似php当中的composer.json是吧 就是一个包的管理工具

go mod tidy 或者 go build 都能将你已经写到import里面但是还不存在的包给下载下来!
假设那天你需要专业项目 转移的知识项目 但是包并没有跟着一起过去 所以可以使用
go mod tidy命令来重新下载项目当中所有用到的包
然后执行命令
go mod verify 来验证所有包是否下载成功

本作品采用《CC 协议》,转载必须注明作者和本文链接
胡军
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!