实用工具包集合,提供常用的基础功能支持。
-
jwt: JWT令牌管理
- 生成与验证JWT令牌
- 支持访问令牌与刷新令牌
- 高性能的令牌验证缓存
- 分段锁设计保证高并发性能
-
crypto: 加密工具
- AES加密/解密
- 支持多种加密模式
- 线程安全的加密操作
-
slice: 切片工具
- 切片差集、交集、并集操作
- 元素查找和去重
- 切片分页工具
-
url: URL工具
- URL解析和构建
- 查询参数处理
- URL标准化
-
useragent: 用户代理解析
- 浏览器信息提取
- 操作系统识别
- 设备类型判断
-
errors: 通用错误处理系统
- 灵活的错误码注册系统
- 支持动态错误码管理
- 错误分类和判断(系统、客户端、业务)
- 错误构建器模式
- 错误格式化器(默认、JSON)
- 错误处理器链
- 错误聚合器
- 完整的堆栈跟踪支持
-
captcha: 验证码生成器 ✨ 新增
- 密码学安全的随机数生成(CSPRNG)
- 纯数字字符集,避免用户输入混淆
- 推荐6位长度,平衡安全性和用户体验
- 支持4-12位长度的灵活配置
- 简单的验证码匹配功能
- 格式验证和自定义字符集支持
go get github.com/iwen-conf/utils-pkgimport "github.com/iwen-conf/utils-pkg/captcha"
// 生成推荐的6位验证码
code, err := captcha.Generate6()
if err != nil {
panic(err)
}
fmt.Printf("验证码: %s\n", code)
// 生成自定义长度的验证码
code8, err := captcha.Generate(8)
if err != nil {
panic(err)
}
// 验证验证码
userInput := "123456"
if captcha.Validate(userInput, code) {
fmt.Println("验证码正确")
} else {
fmt.Println("验证码错误")
}// 使用密码学安全的随机数生成器
code, err := captcha.Generate6() // 使用crypto/rand
// 格式验证
if captcha.IsValidFormat(userInput) {
// 验证码格式正确
}
// 不同长度的验证码
code4, _ := captcha.Generate4() // 4位,1万种组合
code6, _ := captcha.Generate6() // 6位,100万种组合(推荐)
code8, _ := captcha.Generate8() // 8位,1亿种组合import "github.com/iwen-conf/utils-pkg/errors"
// 创建简单错误
err := errors.New("USER001", "用户不存在")
// 创建带详细信息的错误
err = errors.NewWithDetails("DATA001", "数据验证失败", "输入参数不符合要求")
// 包装现有错误
dbErr := fmt.Errorf("数据库连接失败")
err = errors.Wrap(dbErr, "DB001", "数据库操作异常")// 注册自定义错误码
errors.RegisterErrorCode("CUSTOM001", "自定义业务错误")
// 批量注册错误码
errors.RegisterErrorCodes(map[string]string{
"AUTH001": "认证失败",
"AUTH002": "权限不足",
"AUTH003": "令牌过期",
})
// 注册错误码前缀分类
errors.RegisterErrorPrefix("AUTH", "authentication")err := errors.NewBuilder().
Code("USER001").
Message("用户不存在").
Details("用户ID无效").
Context("user_id", "user123").
Context("request_id", "req_456").
Build()// 根据错误码判断类型
if errors.IsSystemError("5000") {
// 系统级错误
}
if errors.IsClientError("4001") {
// 客户端错误
}
if errors.IsBusinessErrorCode("6001") {
// 业务错误
}
// 获取错误分类
category := errors.GetCategoryByCode("5000") // 返回 "server"// 使用默认格式化器
formatted := errors.FormatError(err)
// 设置自定义格式化器
errors.SetDefaultFormatter(&errors.JSONFormatter{})
// 使用错误处理器链
handlerChain := errors.NewHandlerChain().
Add(func(err *errors.Error) error {
// 记录错误日志
log.Printf("Error: %s", err.Error())
return nil
}).
Add(func(err *errors.Error) error {
// 发送错误通知
return nil
})
handlerChain.Handle(err)aggregator := errors.NewAggregator()
// 收集多个错误
aggregator.Add(err1)
aggregator.Add(err2)
aggregator.Add(err3)
if aggregator.HasErrors() {
// 处理聚合的错误
for _, err := range aggregator.Errors() {
fmt.Printf("Error: %s\n", err.Error())
}
}系统提供了一套通用的错误码体系:
- 客户端错误 (4xxx): 请求错误、未授权、禁止访问等
- 服务端错误 (5xxx): 内部错误、服务不可用、网关错误等
- 业务错误 (6xxx): 业务逻辑错误、数据验证失败等
所有错误码都支持动态注册和自定义扩展。
各模块使用方法详见各自目录下的文档。
- 🚀 高性能: 使用对象池、缓存等优化技术
- 🔒 线程安全: 所有模块都经过并发安全设计
- 🎯 通用性: 不再局限于特定业务场景,适用于各种项目
- 🔧 可扩展: 支持自定义错误码、格式化器、处理器等
- 📚 完整文档: 提供详细的使用说明和示例代码
- ✅ 测试覆盖: 所有模块都有完整的测试覆盖