Skip to content

rainhan99/gotools

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gotools

gotools 是一个安全可靠的 Go 语言工具库,提供类型转换、人性化显示、日志记录和实用工具等功能。

🚀 特性

  • 类型转换 (convert): 基础类型与指针类型的安全转换
  • 人性化显示 (human): 字节大小的人性化显示和解析
  • 时间处理 (timeutil): 优雅的时间格式转换和处理工具
  • Webhook 调试 (hook): 第三方 Webhook 请求调试服务器
  • 日志记录 (rlog): 安全的结构化日志记录
  • 实用工具 (tools): 错误处理和安全密码生成

📦 安装

go get github.com/rainhan99/gotools@latest

🛡️ 安全改进

v2.0 重大安全更新

  • 密码生成安全修复: 使用 crypto/rand 替代 math/rand
  • 输入验证增强: 添加全面的参数验证
  • 错误处理规范: 统一错误处理机制
  • 日志安全: 敏感信息自动过滤
  • 资源管理: 改进文件句柄和内存管理

📖 使用示例

类型转换 (convert)

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

人性化显示 (human)

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

日志记录 (rlog)

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)

安全密码生成 (tools)

import "github.com/rainhan99/gotools/tools"

// 生成安全密码
password, err := tools.GeneratePassword(12)
if err != nil {
    log.Fatal(err)
}
fmt.Println("安全密码:", password)

时间处理 (timeutil)

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)

Webhook 调试 (hook)

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() // 启动并监听

错误处理 (tools)

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"

📋 API 参考

convert 包

函数 说明 示例
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)

human 包

函数 说明 示例
ToHuman(bytes uint64) string 字节转人性化字符串 human.ToHuman(1024)
ToHumanWithValidation(bytes uint64) (string, error) 带验证的转换 human.ToHumanWithValidation(1024)
ParseHuman(s string) (uint64, error) 解析人性化字符串 human.ParseHuman("1 GB")

rlog 包

函数 说明 示例
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")

timeutil 包

函数 说明 示例
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小时")

hook 包

函数 说明 示例
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) { ... })

tools 包

函数 说明 示例
GeneratePassword(length int) (string, error) 生成安全密码 tools.GeneratePassword(12)
LogError(err error) 记录错误 tools.LogError(err)

🔒 安全特性

  1. 密码生成: 使用加密安全的随机数生成器
  2. 输入验证: 所有输入都经过严格验证
  3. 错误处理: 统一的错误处理和日志记录
  4. 资源管理: 自动资源清理和泄露防护
  5. 日志安全: 自动过滤敏感信息

🤝 贡献

欢迎提交 Issue 和 Pull Request!

📄 许可证

MIT License - 详见 LICENSE 文件

About

some easy tools for golang .

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages