jxia:
我们很高兴地宣布 gookit/goutil v0.7.1 正式发布!作为 v0.7.0 系列的第一个补丁版本,本次更新带来了 20+ 新功能、关键错误修复以及多项性能优化,进一步提升了开发体验和工具库的实用性。
Github: https://github.com/gookit/goutil
🚀 版本亮点
1. 时间处理能力增强
timex.ToDuration()
方法现在支持负数和复合时间格式
- 支持如
-1.5h
、2d3h
、2hour33min
等多种时间表示方式
- 简化时间计算逻辑,提升代码可读性
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
函数,简化文件读取操作
文档与测试
- 更新了
structs
、testutil
、x/finder
等模块的文档
- 增强了测试覆盖率,修复了多个测试用例
- 更新了 GitHub Actions 工作流,使用最新的 checkout action
🔄 升级指南
安装/更新
go get github.com/gookit/goutil/v0.7.1
注意事项
- API 变更:
SMap
已重命名为 StrMap
,请更新相关代码
- 新功能:建议查看新增函数,可能简化现有代码逻辑
- 错误修复:如果之前遇到
TryAnyMap
的转换问题,现已修复
📈 性能优化
- 优化了映射操作的性能,特别是在处理大型数据结构时
- 改进了字符串处理函数的内存使用效率
- 增强了测试工具的稳定性,减少测试中的不确定性
🤝 社区与贡献
感谢所有为本次版本做出贡献的开发者!我们欢迎社区反馈和贡献,如果您有任何建议或发现问题,请通过 GitHub Issues 告诉我们。
📚 资源链接
立即升级体验新特性,享受更高效的 Go 开发体验!