惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
Kaspersky official blog
IT之家
IT之家
小众软件
小众软件
T
Tailwind CSS Blog
博客园 - 聂微东
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
Hugging Face - Blog
Hugging Face - Blog
D
Docker
爱范儿
爱范儿
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
N
News and Events Feed by Topic
U
Unit 42
The Register - Security
The Register - Security
宝玉的分享
宝玉的分享
J
Java Code Geeks
H
Heimdal Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
酷 壳 – CoolShell
酷 壳 – CoolShell
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
博客园 - Franky
A
About on SuperTechFans
Webroot Blog
Webroot Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Project Zero
Project Zero
V
V2EX
博客园 - 司徒正美
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
The GitHub Blog
The GitHub Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
A
Arctic Wolf
罗磊的独立博客
Forbes - Security
Forbes - Security
PCI Perspectives
PCI Perspectives
SecWiki News
SecWiki News
大猫的无限游戏
大猫的无限游戏
Simon Willison's Weblog
Simon Willison's Weblog
The Cloudflare Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
F
Fortinet All Blogs
博客园 - 【当耐特】
Microsoft Azure Blog
Microsoft Azure Blog

Go 编程语言

构建时自动注入版本号:从 Git tag 到 Go 可执行文件 - V2EX [边缘计算] 想借助 AI 来开发 边缘网关接入 AI 解决设备通信 不知道有没有需求 - V2EX [Go]工业边缘计算网关 edgex 业余时间独立开发 持续更新半年咯 求个 star - V2EX eget:不用等中央仓库,直接安装 GitHub 和任意下载站的工具 - V2EX gookit/gcli v3.8:新增支持共享选项、文档生成和参数重排 - V2EX V2EX 我开源了一款极简的 P2P 文件传输与 VPN 工具 (Win/Mac/ Linux /Android) - V2EX gookit/gcli v3.5.0 发布 - 简单易用、功能丰富的 Go 命令行应用与工具库 - V2EX 用 Go gRPC 信令对接 Android WebRTC:大家一般怎么划分网关和客户端边界? 在服务端用 Pion + FFmpeg + RNN 做 WebRTC 通话降噪,值得吗? 这两种 lint 报错场景, v 友们一般怎么处理 - V2EX tikrok 的部分来时路 tikrok 第 7 代微服务重构: Golang 微服务 grpc 接口与服务实现隔离方案 写了个 Go 库:在 TCP 应用协议开始前做认证,也支持端口敲门 Tikrok v6.0 新的生产级架构,成本不变,但是部署复杂略有增加 go 打包的二进制程序怎么反编译 [边缘计算开源] 工业数据采集网关 版本更新 用 golang 写了,一套面向个人音乐资产的本地优先音乐系统 做了个 Go 的 MCP Server 框架,一行代码把 Gin API 接入 AI - V2EX 写了个 Go 库解决 LLM 流式输出断线重连的问题 - V2EX Tikrok v5.0 新的的底层实现 - V2EX OpenTelemetry 分布式追踪中的回溯采样:削减 60% 尾部采样成本 - V2EX 求推荐一个 go 里运行 js 的方案 - V2EX [边缘计算] 基于 GO 的采集网关持续更新啦 - V2EX [边缘计算开源] 基于 go 写了个独立运行的工业数据采集网关 后续阶段应该如何调整 - V2EX 然后 go-kratos 不怎么活跃了,连最火的 skills 都不搞, github 也没什么人回复了 - V2EX Excelize 开源基础库发布 2.10.1 版本更新 phper 转 go 最好的 web 框架是 goframe 吗? - V2EX A Visual Studio Code extension that displays the disk size of Go module dependencies in go.mod files. - V2EX miglite: Go 极简高效的数据库迁移工具 - V2EX 每秒万级 Tick 震荡:高频行情分发,该选 Golang 的并发原生还是 Rust 的极致性能? - V2EX 给 netcat 引入了 P2P 穿透、多路复用、强加密以及内置服务模块,并且完全开源 - V2EX 使用 "go.inlayHints.parameterNames": true 在 vscode 中开启类似 goland 的参数提示 - V2EX 下面代码中 f()会被重复执行吗?大佬帮忙解答一下~ - V2EX sublimetext 开发 GO 使用体验怎么样 - V2EX [开源] 将 react 的 hooks 和 组件化思路带入 go 的 TUI 开发。 - V2EX gocar 0.2.0 版本:新增自定义命令功能,实现真正的 go 的 cargo - V2EX go 新手,求问导入包失败问题 - V2EX 之前写的, JSR-310 风格的时间日期库, 1.0 了 - V2EX 为了方便学习 go, 使用 go 做了一个命令行版本的 go playground, 代码直接一键运行, 一键编译 - V2EX 虚心请教 Go 前辈们,关于入行 - V2EX 关于 Go 的工程经验 - V2EX 微信开发框架开源,基于 Go+Wails3+React - V2EX Golang 实现的开源 NVR 支持 GB28181 & ONVIF 啦 - V2EX go-carbon v2.6.15 正式版发布,已被 docker 官方组织使用 - V2EX 如何用 3–5 个高效问题快速识别 Golang 开发者的技术素养? - V2EX 有没有 go 的 ai 应用项目学习学习 - V2EX Go 环境版本管理用哪个- -有点疑惑 - V2EX Goland 下的通义千问不能选择模型,VScode 下面的通义千问可以选择模型 - V2EX 新手入门求指导 - V2EX 看 Go 的时间库不顺眼很久了,所以从别的语言里抄了一个 - V2EX go-dongle v1.2.0 发布,新增 SM2 非对称椭圆曲线加密算法支持 - V2EX Wails2+Vue3 本地的绑定文件和 Vite 上的不一致 - V2EX go 返回错误的时候, 返回的值应该可用吗 - V2EX Go 入门基础课(2025 Golang) - V2EX goland 中如何 debug wails - V2EX 日期函数获取上一个月 bug, 在一些特殊日子才出现,比如今天 10-31 - V2EX go-carbon v2.6.14 发布,一个轻量级、语义化的 golang 时间处理库 - V2EX goroutine 到底算不算一种 coroutine 的实现? - V2EX 为什么不用 gRPC-Go: VictoriaTraces 中实现 OTLP/gRPC 的幕后故事 - V2EX go 最新版的 map 并发读是安全的吗。 - V2EX 请问一下 golang 下有什么成熟稳定的串口通讯包? - V2EX golang.org/x/sync/syncmap 被 struct 裹挟时 使用前为什么必须为每个键初始化 不然取值得到 nil go-dongle v1.1.7 发布,新增 SM4 国密分组对称加密算法支持 在开发接口的过程中,如何快速验证结果? - V2EX go-carbon v2.6.13 发布,一个轻量级、语义化的 golang 时间处理库
Go 工具库 gookit/goutil v0.7.2 发布:增强功能与修复,提升开发体验 - V2EX
jxia · 2025-11-20 · via Go 编程语言

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