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 v0.7.2 发布:增强功能与修复,提升开发体验

  •  1
     
  •   jxia · 20 天前 · 1324 次点击

    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   ·   1005 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:50 · PVG 02:50 · LAX 10:50 · JFK 13:50
    ♥ Do have faith in what you're doing.