Go 工具库 gookit/goutil v0.7.2 发布:增强功能与修复,提升开发体验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jxia
V2EX    Go 编程语言

Go 工具库 gookit/goutil v.7.2 发布:增强功能与修复,提升开发体验

  •  1
     
  •   jxia 1 天前 862 次点击

    gookit/goutil v0.7.2 现已发布!此版本带来了多项新功能、优化和问题修复,进一步增强了这个 Go 语言实用工具库的稳定性和易用性。 本次更新涉及多个模块,包括数学工具、字符串处理、文件系统操作、命令行标志处理等,旨在为开发者提供更丰富、更高效的工具集。

    主要问题修复

    本版本修复了几个关键问题,确保工具库的稳定运行:

    • ccolor 模块:修复了 NO_COLOR 环境变量在打印时无法正常工作的问题,提升了颜色输出的兼容性。
    • cflag 模块
      • 修复了解析全局标志时 capp 运行错误的问题。
      • 修复了在没有命令输入时 OnAppFlagParsed 事件未触发的问题,确保事件处理逻辑的完整性。

    新增功能亮点

    math 工具

    • 新增 IsInteger 函数,用于严格检查值是否为整数类型(如 int(x), uint(x))。
    • 新增 StrictIntStrictUint 转换函数,提供更严格的整数类型转换。
    • 新增 FormatBytes 函数,可将字节大小格式化为易读的字符串(如 "1.2 MB"),方便日志输出和用户界面显示。

    string 工具

    • 新增 NumVersion 函数,用于快速获取版本号字符串中的数字部分。
    • 新增 ReplaceVars 函数,支持快速渲染包含 {var} 占位符的字符串,简化模板替换操作。
    • 新增 IsUpperIsLower 函数,用于检查字符串是否全部为大写或小写。
    • 新增 IsUintIsPositiveNum 函数,增强字符串数值验证能力。
    • 新增 BaseConvIntBaseConvIntByTpl 函数,支持不同进制间的整数转换。
    • 新增 ContainsByteOne 函数,检查字符串是否包含指定字节之一。
    • 优化 MTimeBaseID 函数,现在支持大于 36 的进制。

    文件系统工具

    • 新增 EnsureDir 函数,确保目录存在(如不存在则创建)。
    • 新增 HomeDir/UserHomeDir 函数,用于获取用户主目录路径。
    • 新增 CreateSymlinkIsSymlink 函数,支持符号链接的创建与检测。
    • 新增 FindAllInParentDirsFindOneInParentDirsFindNameInParentDirs 函数,支持在父级目录中查找文件,简化项目配置文件的定位。

    数组/切片工具

    • 新增 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 和相关文档,改进了项目文档的生成流程和模板。
    • 修复了单元测试错误并统一了代码风格。
    • 对部分注释和代码风格进行了更新。

    如何更新

    您可以使用以下命令来获取最新版本:

    go get github.com/gookit/[email protected] 

    迁移与兼容性注意

    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 带来的新功能和改进吧!

    目前尚无回复
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2626 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 09:44 PVG 17:44 LAX 01:44 JFK 04:44
    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