包管理

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    # 导入管理