gookit/goutil v0.7.2 发布:增强功能与修复,提升开发体验
gookit/goutil v0.7.2 现已发布!此版本带来了多项新功能、优化和问题修复,进一步增强了这个 Go 语言实用工具库的稳定性和易用性。 本次更新涉及多个模块,包括数学工具、字符串处理、文件系统操作、命令行标志处理等,旨在为开发者提供更丰富、更高效的工具集。
- 项目主页:https://github.com/gookit/goutil
- 完整变更日志:v0.7.2 Release Notes
- 完整文档查看 [https://zread.ai/gookit/goutil]https://zread.ai/gookit/goutil
🛠️ 主要问题修复
本版本修复了几个关键问题,确保工具库的稳定运行:
- ccolor 模块:修复了
NO_COLOR环境变量在打印时无法正常工作的问题,提升了颜色输出的兼容性。 - cflag 模块:
- 修复了解析全局标志时
capp运行错误的问题。 - 修复了在没有命令输入时
OnAppFlagParsed事件未触发的问题,确保事件处理逻辑的完整性。
- 修复了解析全局标志时
✨ 新增功能亮点
math 工具
- 新增
IsInteger函数,用于严格检查值是否为整数类型(如int(x),uint(x))。 - 新增
StrictInt和StrictUint转换函数,提供更严格的整数类型转换。 - 新增
FormatBytes函数,可将字节大小格式化为易读的字符串(如 “1.2 MB”),方便日志输出和用户界面显示。
string 工具
- 新增
NumVersion函数,用于快速获取版本号字符串中的数字部分。 - 新增
ReplaceVars函数,支持快速渲染包含{var}占位符的字符串,简化模板替换操作。 - 新增
IsUpper和IsLower函数,用于检查字符串是否全部为大写或小写。 - 新增
IsUint和IsPositiveNum函数,增强字符串数值验证能力。 - 新增
BaseConvInt和BaseConvIntByTpl函数,支持不同进制间的整数转换。 - 新增
ContainsByteOne函数,检查字符串是否包含指定字节之一。 - 优化
MTimeBaseID函数,现在支持大于 36 的进制。
文件系统工具
- 新增
EnsureDir函数,确保目录存在(如不存在则创建)。 - 新增
HomeDir/UserHomeDir函数,用于获取用户主目录路径。 - 新增
CreateSymlink和IsSymlink函数,支持符号链接的创建与检测。 - 新增
FindAllInParentDirs、FindOneInParentDirs和FindNameInParentDirs函数,支持在父级目录中查找文件,简化项目配置文件的定位。
数组/切片工具
- 新增
ToMap函数,用于将列表(切片)转换为映射。 - 新增
Map1函数,用于将一个列表转换为新的列表(类似 map 操作)。
映射工具
- 新增
AppendSMap函数,用于合并字符串map。 - 新增
AliasesNames函数,用于处理别名名称。
测试工具
- 新增
assert.StrContainsAll断言函数,检查字符串是否包含所有指定的子串。 - 新增
testutil.SafeBuffer类型,这是一个线程安全的缓冲区,专为并发测试场景设计。 - 增强
testutil.EchoServer,现在支持响应 404、405、500 或自定义状态码,便于测试 HTTP 客户端的错误处理逻辑。
命令行工具
cflag模块新增HelpOnEmptyArgs配置选项,当没有提供参数时自动显示帮助信息,提升用户体验。- 优化帮助信息的渲染输出。
cflag/capp命令新增支持设置别名
时间工具
- 新增
FormatDuration函数,用于将时间消耗格式化为时钟格式(如 “1h 23m 45s”),非常适合性能统计的展示。
⚡ 性能优化与重构
- 优化
ToStringWith函数的通用逻辑,提升转换性能。 - 重构
cflag.App至子包capp.App,改进代码组织结构。 - 优化
ToInt64With函数的处理选项逻辑,提升转换效率。 - 将整数转换相关代码拆分至
conv2int.go,并优化了mathutil中所有整数转换相关方法的性能。 - 更新
VersionCompare函数逻辑,修复了部分比较错误,提升版本比较的准确性。 textutil中的VarReplacer现在支持将变量名作为环境变量进行解析,增强了动态配置能力。
🌐 平台兼容性与开发流程
- 新增对 FreeBSD/Unix 系统的支持,扩展了
sysutil包的平台覆盖范围。 - 为 gookit/goutil 添加了全面的 GitHub Copilot 指令,优化了基于 AI 的开发工作流。
- 升级
github/codeql-action依赖从版本 3 到 4,提升了代码分析的安全性和能力。
📝 其他更新
- 为
dump输出添加了ShowLen选项,允许控制是否显示长度信息。 - 更新了 README 生成 CLI 和相关文档,改进了项目文档的生成流程和模板。
- 修复了单元测试错误并统一了代码风格。
- 对部分注释和代码风格进行了更新。
📦 如何更新
您可以使用以下命令来获取最新版本:
迁移与兼容性注意
cflag -> cflag/capp子包重构:cflag.App 被重构为 capp.App。如果你的代码直接引用 cflag.App,请调整:- 旧:
import "github.com/gookit/goutil/cflag" - 新:
import "github.com/gookit/goutil/capp" - 并将相关类型/调用切换到
capp包的 App。
- 旧:
TIP: 这是本次可能的破坏性变更,请在升级前检查并更新引用。
VersionCompare与一些字符串/版本相关逻辑做了优化,若你依赖旧逻辑的边界行为(如比较相等或排序),请在升级后运行相关单元测试验证。
示例片段
使用 mathutil.IsInteger / StrictInt
import "github.com/gookit/goutil/mathutil"
import "github.com/gookit/goutil/testutil/assert"
val := 123
if mathutil.IsInteger(val)
i64, ok := mathutil.StrictInt("42") // 不允许string转换为整型
assert.False(t, ok)
使用 strutil.ReplaceVars
import "github.com/gookit/goutil/strutil"
tpl := "Hello, {name}! Today is {day}."
out := strutil.ReplaceVars(tpl, map[string]string)
// Output: "Hello, Gopher! Today is Wednesday."
使用 fsutil.EnsureDir
import "github.com/gookit/goutil/fsutil"
if err := fsutil.EnsureDir("/tmp/myapp/logs"); err != nil
🤝 贡献
我们感谢所有贡献者对本次版本发布的努力!如果您发现了任何问题或有功能建议,欢迎在 GitHub Issues 中提出。
📖 更多信息
- 项目主页:https://github.com/gookit/goutil
- 完整变更日志:v0.7.2 Release Notes
- 完整文档查看 https://zread.ai/gookit/goutil
享受 v0.7.2 带来的新功能和改进吧!