gookit/goutil v0.7.1 发布:增强工具集与使用优化 - V2EX
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 136 天前 1267 次点击
    这是一个创建于 136 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们很高兴地宣布 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     Solana     2710 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 08:58 PVG 16:58 LAX 00:58 JFK 03:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86