Go封装通用函数为独立包的核心是组织包结构、设计接口、管理依赖与版本;需小写简洁包名、单一职责函数、统一错误处理、示例测试覆盖及语义化版本控制。

用 Go 语言封装通用函数为独立包,核心是把重复逻辑抽离成可导入、可测试、有明确边界的小模块。重点不在“怎么写函数”,而在“怎么组织包结构、怎么设计接口、怎么管理依赖和版本”。
包命名与目录结构要清晰
包名应小写、简洁、体现职责,比如 strutil(字符串工具)、httpx(HTTP 增强封装)、retry(重试逻辑)。避免用 utils 或 common 这类模糊名称。
- 每个包放在独立目录下,路径即导入路径,如
github.com/yourname/strutil - 主函数放在
root.go或main.go(仅限可执行包),通用函数直接放在包根目录的xxx.go文件里 - 不导出的辅助函数、类型用小写开头,导出的接口和函数首字母大写
函数设计遵循单一职责和最小接口原则
一个函数只做一件事,参数尽量少,必要时用选项模式(Option Pattern)替代大量布尔或配置参数。
- 避免写
DoSomething(data interface{}, debug bool, timeout int, retry bool)这类“万能函数” - 推荐写法:
ParseJSON(data []byte) (map[string]interface{}, error)或带选项的NewClient(opts ...ClientOption) *Client - 错误处理统一返回
error,不 panic(除非是真正不可恢复的编程错误)
提供示例和单元测试,让使用者快速上手
Go 的 example_*.go 文件会被 go test -v 自动识别并运行;每个导出函数建议配一个简单示例。
立即学习“go语言免费学习笔记(深入)”;
- 在包目录下写
example_trim_test.go,函数名以Example开头,调用后用// Output:注释说明期望输出 - 用
go test -v验证示例是否有效,也顺便跑单元测试 - 测试覆盖核心路径:正常输入、空值、边界值、错误场景
通过 go.mod 管理版本与兼容性
初始化包时运行 go mod init github.com/yourname/strutil,后续升级用语义化版本(如 v1.2.0)。
- 主版本号(v1、v2)变更意味着不兼容改动,需新建模块路径(如
github.com/yourname/strutil/v2) - 发布前用
go list -m all检查依赖是否干净,避免意外引入大而重的间接依赖 - 在 README.md 中写明支持的 Go 版本(如 “Go 1.19+”)和典型用法










