到目前为止,所有示例代码只有一 Go 文件,其中包含一个 main函数和几个其他函数。这种将所有源代码写入单个文件的方法是不可扩展的。重用和维护以这种方式编写的代码变得不可能。这就是需要使用包的原因。
包用于组织 Go 源代码以获得更好的可重用性和可读性。包是位于同一目录中的 Go 源文件的集合。包提供了代码划分,因此使得Go 项目易于维护。
主函数和主包
每个可执行的 Go 应用程序都必须包含 main 函数。该函数是执行的入口点。主要功能应该驻留在主包中。
package packagename指定特定源文件属于 package packagename。这应该是每个 go 源文件的第一行。
Go Module
Go1.11开始新增了命令go mod来支持Modules的使用。
初始化
首先确保在确保在learnpackage目录中。在这个目录中运行以下命令来创建一个名为learnpackage的 go 模块。
go mod init learnPackage
上面的命令将创建一个名为go.mod. 以下将是该文件的内容。
该行module learnpackage指定模块的名称是learnpackage。正如我们之前提到的,learnpackage将是导入此模块内创建的任何包的基本路径。
导入第三方包
开发中我们经常要用到第三方包
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
}).Info("A walrus appears")
}
第 4 行我们引入了第三方的 log 包。保存好之后,然后执行 go build,再次查看go.mod文件发现多了一些内容:
module learnpackage go 1.18
require github.com/sirupsen/logrus v1.1.1
这就是引入第三方包。但是通常我们借助 ide 或 其它智能编辑器时,都会自动下载包。
常用命令
以上章节,都假设你是一位想学习 golang 编程的新手。 关于 go modules,只使用到了 go mod init 命令。若想看看 go mod 还有哪些功能,使用 go mod help 查看。
随着你的项目越来越复杂,会引用别人写好的库,这时你会需要 go mod tidy 来帮助管理。
go mod init initialize new module in current directory 在当前目录初始化mod
go mod tidy //拉取缺少的模块,移除不用的模块。
go mod download //下载依赖包
go mod vendor //将依赖复制到vendor下
go mod verify //校验依赖
go list -m -json all //依赖详情
go mod graph //打印模块依赖图
go mod why //解释为什么需要依赖