Go 包和模块
本章将介绍 Go 的包管理和模块系统。
包 (Package)
什么是包
包是 Go 组织代码的基本单位,每个 .go 文件都属于一个包。
包命名
- 包名通常是小写的单词
- 与目录名保持一致
- main 包是程序入口
导入包
import "fmt"
import "os"
import (
"fmt"
"os"
"strings"
)
导出名称
以大写字母开头的名称是导出的,可以被其他包访问:
type Person struct { // 导出
Name string // 导出
age int // 不导出
}
func PublicFunc() {} // 导出
func privateFunc() {} // 不导出
模块 (Module)
初始化模块
go mod init module-name
生成 go.mod 文件:
module mymodule
go 1.21
添加依赖
go get github.com/gin-gonic/gin
管理依赖
# 下载所有依赖
go mod download
# 整理依赖
go mod tidy
# 列出依赖
go list -m all
# 降级依赖
go get github.com/pkg/[email protected]
目录结构
myproject/
├── go.mod
├── go.sum
├── main.go
├── utils/
│ ├── go.mod (可选)
│ └── helper.go
└── api/
└── handler.go
工作区模式
Go 1.18 引入的工作区模式允许同时开发多个模块:
go work init ./module1 ./module2
生成 go.work 文件:
go 1.21
use (
./module1
./module2
)
小结
- 包:代码组织单元
- 模块:依赖管理单元
- go.mod:模块定义文件
- go get:添加依赖
- go mod tidy:整理依赖
练习
- 创建模块并添加依赖
- 创建自定义包并导入使用
- 使用 go mod tidy 整理依赖