gookit/goutil v0.7.2 现已发布!此版本带来了多项新功能、优化和问题修复,进一步增强了这个 Go 语言实用工具库的稳定性和易用性。
本次更新涉及多个模块,包括数学工具、字符串处理、文件系统操作、命令行标志处理等,旨在为开发者提供更丰富、更高效的工具集。
本版本修复了几个关键问题,确保工具库的稳定运行:
NO_COLOR 环境变量在打印时无法正常工作的问题,提升了颜色输出的兼容性。capp 运行错误的问题。OnAppFlagParsed 事件未触发的问题,确保事件处理逻辑的完整性。IsInteger 函数,用于严格检查值是否为整数类型(如 int(x), uint(x))。StrictInt 和 StrictUint 转换函数,提供更严格的整数类型转换。FormatBytes 函数,可将字节大小格式化为易读的字符串(如 "1.2 MB"),方便日志输出和用户界面显示。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 现在支持将变量名作为环境变量进行解析,增强了动态配置能力。sysutil 包的平台覆盖范围。github/codeql-action 依赖从版本 3 到 4 ,提升了代码分析的安全性和能力。dump 输出添加了 ShowLen 选项,允许控制是否显示长度信息。您可以使用以下命令来获取最新版本:
go get github.com/gookit/goutil@v0.7.2
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) {
// true
}
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{
"name": "Gopher",
"day": "Wednesday",
})
// 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 中提出。
享受 v0.7.2 带来的新功能和改进吧!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.