gotools 是一个安全可靠的 Go 语言工具库,提供类型转换、人性化显示、日志记录和实用工具等功能。
- 类型转换 (
convert): 基础类型与指针类型的安全转换
- 人性化显示 (
human): 字节大小的人性化显示和解析
- 时间处理 (
timeutil): 优雅的时间格式转换和处理工具
- Webhook 调试 (
hook): 第三方 Webhook 请求调试服务器
- 日志记录 (
rlog): 安全的结构化日志记录
- 实用工具 (
tools): 错误处理和安全密码生成
go get github.com/rainhan99/gotools@latest
- ✅ 密码生成安全修复: 使用
crypto/rand 替代 math/rand
- ✅ 输入验证增强: 添加全面的参数验证
- ✅ 错误处理规范: 统一错误处理机制
- ✅ 日志安全: 敏感信息自动过滤
- ✅ 资源管理: 改进文件句柄和内存管理
import "github.com/rainhan99/gotools/convert"
// 值转指针
name := convert.String("hello")
age := convert.Int(25)
// 指针转值(带nil检查)
nameValue := convert.ToString(name) // "hello"
ageValue := convert.ToInt(age) // 25
import "github.com/rainhan99/gotools/human"
// 基础转换
size := human.ToHuman(1073741824) // "1.00 GB"
// 带验证的转换
size, err := human.ToHumanWithValidation(1073741824)
if err != nil {
log.Fatal(err)
}
// 自定义精度
size, err := human.ToHumanWithPrecision(1073741824, 3) // "1.000 GB"
// 解析人性化字符串
bytes, err := human.ParseHuman("1.5 GB") // 1610612736
import "github.com/rainhan99/gotools/rlog"
// 创建日志记录器
logger, err := rlog.NewLogger(rlog.INFO, "app.log")
if err != nil {
panic(err)
}
defer logger.Close()
// 使用日志
logger.Info("应用启动成功")
logger.Error("发生错误: %v", err)
// 全局日志函数
rlog.Info("这是一条信息日志")
rlog.SetGlobalLevel(rlog.DEBUG)
import "github.com/rainhan99/gotools/tools"
// 生成安全密码
password, err := tools.GeneratePassword(12)
if err != nil {
log.Fatal(err)
}
fmt.Println("安全密码:", password)
import "github.com/rainhan99/gotools/timeutil"
// 基础格式化
now := timeutil.Now(timeutil.DateTime) // "2024-12-19 15:30:45"
date := timeutil.NowWithEnum(timeutil.FormatDate) // "2024-12-19"
// 智能解析
t, err := timeutil.SmartParse("2024-12-19 15:30:45")
t2, err := timeutil.SmartParse("2024年12月19日")
// 相对时间
relative := timeutil.ToRelative(time.Now().Add(-2*time.Hour)) // "2小时前"
// 时区转换
converter := timeutil.NewTimeConverterWithLocation(time.UTC)
utcTime := converter.Format(time.Now(), timeutil.DateTime)
// 时间计算
startOfDay := converter.StartOfDay(time.Now())
age := converter.GetAge(birthday)
import "github.com/rainhan99/gotools/hook"
// 快速启动Webhook调试服务器
server := hook.New()
server.Listen(":8080", "your-webhook-token")
// 高级配置
server := hook.New().
WithPort(8080).
WithToken("github-secret").
WithTokenInHeader("X-Hub-Signature-256").
WithLogFile("webhook-debug.log")
// 设置回调处理
server.OnRequest(func(req *hook.RequestInfo) {
fmt.Printf("收到来自 %s 的Webhook\n", req.UserIP)
})
server.Start() // 启动并监听
import "github.com/rainhan99/gotools/tools"
// 推荐的新方法
tools.LogError(err)
tools.LogErrorf("操作失败: %v", err)
// 自定义输出位置
var buf bytes.Buffer
tools.LogErrorTo(&buf, err)
config := &rlog.LoggerConfig{
Level: rlog.DEBUG,
LogFile: "/var/log/app.log",
Prefix: "[MyApp] ",
Flag: log.LstdFlags | log.Lshortfile,
SanitizeFunc: func(msg string) string {
// 自定义敏感信息过滤
return strings.ReplaceAll(msg, "secret", "***")
},
}
logger, err := rlog.NewLoggerWithConfig(config)
// 创建带时区的转换器
loc, _ := time.LoadLocation("Asia/Shanghai")
converter := timeutil.NewTimeConverterWithLocation(loc)
// 时间范围计算
startOfWeek := converter.StartOfWeek(time.Now())
endOfMonth := converter.EndOfMonth(time.Now())
// 时间间隔处理
duration, _ := timeutil.ParseDuration("2小时30分钟")
formatted := timeutil.FormatDuration(duration) // "2小时30分钟"
// 时间判断
isToday := converter.IsToday(someTime)
isYesterday := converter.IsYesterday(someTime)
// 获取格式化结果和单位
value, unit, err := human.FormatBytes(1073741824, 2)
fmt.Printf("%.2f %s\n", value, unit.String()) // "1.00 GB"
| 函数 |
说明 |
示例 |
Bool(b bool) *bool |
bool 转指针 |
convert.Bool(true) |
String(s string) *string |
string 转指针 |
convert.String("hello") |
Int(i int) *int |
int 转指针 |
convert.Int(42) |
ToBool(b *bool) bool |
指针转 bool |
convert.ToBool(ptr) |
ToString(s *string) string |
指针转 string |
convert.ToString(ptr) |
ToInt(i *int) int |
指针转 int |
convert.ToInt(ptr) |
| 函数 |
说明 |
示例 |
ToHuman(bytes uint64) string |
字节转人性化字符串 |
human.ToHuman(1024) |
ToHumanWithValidation(bytes uint64) (string, error) |
带验证的转换 |
human.ToHumanWithValidation(1024) |
ParseHuman(s string) (uint64, error) |
解析人性化字符串 |
human.ParseHuman("1 GB") |
| 函数 |
说明 |
示例 |
NewLogger(level LogLevel, file string) (*Logger, error) |
创建日志器 |
rlog.NewLogger(rlog.INFO, "app.log") |
Debug/Info/Warning/Error/Fatal(format string, v ...interface{}) |
日志输出 |
logger.Info("message") |
| 函数 |
说明 |
示例 |
Now(format string) string |
获取当前格式化时间 |
timeutil.Now(timeutil.DateTime) |
SmartParse(timeStr string) (time.Time, error) |
智能解析时间 |
timeutil.SmartParse("2024-12-19") |
ToRelative(t time.Time) string |
相对时间显示 |
timeutil.ToRelative(pastTime) |
FormatDuration(d time.Duration) string |
格式化时间间隔 |
timeutil.FormatDuration(2*time.Hour) |
ParseDuration(s string) (time.Duration, error) |
解析中文时间间隔 |
timeutil.ParseDuration("2小时") |
| 函数 |
说明 |
示例 |
New() *Server |
创建 Webhook 服务器 |
hook.New() |
Listen(address, token string) error |
快速启动服务器 |
server.Listen(":8080", "token") |
WithPort(port int) *Server |
设置端口 |
server.WithPort(8080) |
WithToken(token string) *Server |
设置 Token |
server.WithToken("secret") |
WithTokenInHeader(headerName string) *Server |
Header 中验证 Token |
server.WithTokenInHeader("X-Token") |
OnRequest(callback func(*RequestInfo)) *Server |
设置请求回调 |
server.OnRequest(func(req) { ... }) |
| 函数 |
说明 |
示例 |
GeneratePassword(length int) (string, error) |
生成安全密码 |
tools.GeneratePassword(12) |
LogError(err error) |
记录错误 |
tools.LogError(err) |
- 密码生成: 使用加密安全的随机数生成器
- 输入验证: 所有输入都经过严格验证
- 错误处理: 统一的错误处理和日志记录
- 资源管理: 自动资源清理和泄露防护
- 日志安全: 自动过滤敏感信息
欢迎提交 Issue 和 Pull Request!
MIT License - 详见 LICENSE 文件