包管理
Go Modules
Go语言的模块系统。
# 初始化模块
go mod init myproject
# 添加依赖
go get github.com/gin-gonic/gin
# 更新依赖
go get -u github.com/gin-gonic/gin
# 整理依赖
go mod tidy
# 验证依赖
go mod verify
# 查看依赖
go list -m all
# go.mod 示例
module myproject
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/go-sql-driver/mysql v1.7.1
)
replace (
github.com/gin-gonic/gin => ./vendor/github.com/gin-gonic/gin
)
包组织
Go包的组织原则和最佳实践。
# 包命名
- 使用小写字母
- 使用单个单词
- 避免使用下划线或混合大小写
- 避免使用缩写(除非是广泛使用的)
# 包职责
- 每个包应该有一个明确的职责
- 包名应该反映其功能
- 避免循环依赖
- 保持包的独立性
# 导入组织
- 标准库包
- 第三方包
- 内部包
# 示例
import (
// 标准库
"fmt"
"net/http"
// 第三方包
"github.com/gin-gonic/gin"
"github.com/go-sql-driver/mysql"
// 内部包
"myproject/internal/auth"
"myproject/pkg/utils"
)
依赖管理
依赖管理的最佳实践。
# 1. 版本控制
- 使用语义化版本
- 锁定依赖版本
- 定期更新依赖
# 2. 依赖选择
- 选择活跃维护的包
- 检查包的许可证
- 评估包的质量
# 3. 依赖优化
- 最小化依赖数量
- 避免重复依赖
- 使用go mod tidy保持依赖整洁
# 4. 私有依赖
- 使用replace指令
- 使用私有仓库
- 使用vendor目录
# 示例:私有依赖配置
# go.mod
module myproject
go 1.21
require (
github.com/company/private-package v1.0.0
)
replace github.com/company/private-package => ./vendor/github.com/company/private-package
包发布
发布Go包的最佳实践。
# 1. 版本控制
- 使用git标签
- 遵循语义化版本
- 保持版本历史
# 2. 文档
- 编写README.md
- 提供使用示例
- 添加godoc注释
# 3. 测试
- 编写单元测试
- 提供测试覆盖率
- 运行集成测试
# 4. 发布步骤
1. 更新版本号
2. 更新CHANGELOG.md
3. 创建git标签
4. 推送到远程仓库
# 示例:发布新版本
git tag v1.0.0
git push origin v1.0.0
工具链
包管理相关的工具。
# 1. go mod
go mod init # 初始化模块
go mod tidy # 整理依赖
go mod vendor # 创建vendor目录
go mod verify # 验证依赖
# 2. go get
go get -u # 更新依赖
go get -d # 只下载不安装
go get -t # 下载测试依赖
# 3. go list
go list -m all # 列出所有依赖
go list -u -m # 检查更新
# 4. 其他工具
- gopls # Go语言服务器
- golangci-lint # 代码检查
- goimports # 导入管理