V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jxia
V2EX  ›  Go 编程语言

gookit/goutil v0.7.1 发布:增强工具集与使用优化

  •  1
     
  •   jxia · 21 天前 · 785 次点击

    我们很高兴地宣布 gookit/goutil v0.7.1 正式发布!作为 v0.7.0 系列的第一个补丁版本,本次更新带来了 20+ 新功能、关键错误修复以及多项性能优化,进一步提升了开发体验和工具库的实用性。

    Github: https://github.com/gookit/goutil


    🚀 版本亮点

    1. 时间处理能力增强

    • timex.ToDuration() 方法现在支持负数和复合时间格式
    • 支持如 -1.5h2d3h2hour33min 等多种时间表示方式
    • 简化时间计算逻辑,提升代码可读性

    2. 映射操作工具新增功能

    • 新增 AnyToStrMap() 函数,实现任意类型到字符串映射的转换
    • 引入 L2StrMap 类型,支持二级字符串映射操作
    • Data 类型新增多个实用方法:One()StrOne()BoolOne()
    • 添加切片到映射的转换函数:SliceToSMap()SliceToMap()SliceToTypeMap()

    3. 字符串处理增强

    • 新增不区分大小写的字符串检查函数:IContainsOne()IContainsAll()
    • 添加快速逗号连接函数 JoinComma()
    • 引入 IsVarName() 函数,用于变量名格式验证

    4. 文本工具增强

    • 新增 StrVarRenderer,实现类似 shell 变量渲染器的功能
    • 简化测试中的变量替换和模板渲染操作

    🛠️ 主要功能详解

    ⏱️ 时间处理增强

    // 支持负数和复合时间格式
    duration, err := timex.ToDuration("-1.5h") // -1 小时 30 分钟
    duration, err := timex.ToDuration("2d3h") // 2 天 3 小时
    duration, err := timex.ToDuration("2hour33min") // 2 小时 33 分钟
    

    🗺️ 映射操作升级

    // 任意类型到字符串映射的转换
    strMap := maputil.AnyToStrMap(someData)
    
    // 多键值获取
    value := data.One("key1", "key2", "key3") // 尝试多个键,返回第一个存在的值
    
    // 切片到映射的转换
    slice := []string{"a:1", "b:2", "c:3"}
    sMap := maputil.SliceToSMap(slice, ":") // {"a": "1", "b": "2", "c": "3"}
    

    📝 字符串处理新功能

    // 不区分大小写的包含检查
    strutil.IContainsOne("Hello World", []string{"hello", "golang"}) // true
    
    // 快速逗号连接
    result := strutil.JoinComma([]string{"a", "b", "c"}) // "a,b,c"
    
    // 变量名验证
    isValid := strutil.IsVarName("valid_var123") // true
    

    🧪 文本工具增强

    简单的实现类似 php, kotlin, shell 插值变量渲染,表达式解析处理。

    • var format: $var_name, ${some_var}, ${top.sub_var}
    • func call: ${func_name($var_name, 'const string')}
    // 使用 StrVarRenderer 进行变量渲染
    renderer := textutil.NewStrVarRenderer()
    result := renderer.Render("Hello ${name}", map[string]string{"name": "World"}) // "Hello World"
    

    🐛 错误修复

    • 修复了 maputil.TryAnyMap 在处理非字符串键映射时的转换错误
    • 修复了内部 ParseEnvLines 在某些情况下的解析错误
    • 优化了多个测试用例,提高了测试稳定性

    🔧 其他重要更新

    • ✨ feat:structs - StructToMap 添加新选项:IgnoreEmpty 、UserFunc 001c4da
    • ✨ feat:structs - SetValues 添加新选项:BeforeSetFn 钩子 4a8b758

    重构与优化

    • SMap 重命名为 StrMap,提高命名一致性
    • 提取公共 ENV 行解析方法到内部包,减少代码重复
    • jsonutil 新增 DecodeFile 函数,简化文件读取操作

    文档与测试

    • 更新了 structstestutilx/finder 等模块的文档
    • 增强了测试覆盖率,修复了多个测试用例
    • 更新了 GitHub Actions 工作流,使用最新的 checkout action

    🔄 升级指南

    安装/更新

    go get github.com/gookit/goutil/v0.7.1
    

    注意事项

    1. API 变更SMap 已重命名为 StrMap,请更新相关代码
    2. 新功能:建议查看新增函数,可能简化现有代码逻辑
    3. 错误修复:如果之前遇到 TryAnyMap 的转换问题,现已修复

    📈 性能优化

    • 优化了映射操作的性能,特别是在处理大型数据结构时
    • 改进了字符串处理函数的内存使用效率
    • 增强了测试工具的稳定性,减少测试中的不确定性

    🤝 社区与贡献

    感谢所有为本次版本做出贡献的开发者!我们欢迎社区反馈和贡献,如果您有任何建议或发现问题,请通过 GitHub Issues 告诉我们。


    📚 资源链接

    立即升级体验新特性,享受更高效的 Go 开发体验!

    目前尚无回复
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2827 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 00:02 · PVG 08:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.