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

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


🚀 版本亮点

1. 时间处理能力增强

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

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

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

3. 字符串处理增强

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

4. 文本工具增强

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

🛠️ 主要功能详解

⏱️ 时间处理增强

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

🗺️ 映射操作升级

go 复制代码
// 任意类型到字符串映射的转换
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"}

📝 字符串处理新功能

go 复制代码
// 不区分大小写的包含检查
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')}
go 复制代码
// 使用 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

🔄 升级指南

安装/更新

bash 复制代码
go get github.com/gookit/goutil/v0.7.1

注意事项

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

📈 性能优化

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

🤝 社区与贡献

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


📚 资源链接

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

相关推荐
BS30813_vx6 小时前
基于 Express + uni-app 的养老院管理系统设计与实现
后端·uni-app·express
明月_清风6 小时前
DeepSeek Harness 安全审计实录:四个 PoC 揭露的 Agent 运行时"信任危机"
后端·安全·agent
苏三说技术6 小时前
再见了EasyExcel,我决定用Apache Fesod
后端
Boop_wu6 小时前
[redis] redis 快速入门
数据库·redis·github
XR1234567886 小时前
医院移动医护零漫游无线网络选型指南
java·后端·struts
ly76897 小时前
Spring Bean生命周期全流程:从BeanDefinition到销毁
java·后端·spring·bean生命周期·beandefinition·初始化回调
leeyi7 小时前
在 Go 里跑不信任的代码:WASM 沙箱的四道墙(第107篇)
后端
摇滚侠7 小时前
《Spring Boot 3:高级与架构设计》第 1 章 BeanDefinitionRegistry 阅读笔记 3
spring boot·笔记·后端
烂蜻蜓7 小时前
Flask入门教程(三十一):实用函数与类API——全局工具函数速查
后端·python·flask
计算机毕设定制辅导-无忧学长7 小时前
《基于Spring Boot传承之光非遗陶瓷烧造产品交易平台的设计与实现》
java·vue.js·spring boot·后端·毕业设计