Go开发者的工具箱:gookitgoutil,900+实用函数汇集

Go开发者的工具箱:gookit/goutil,900+实用函数汇集

Go标准库以精简著称,但日常开发中经常缺一些组合操作:数组差集交集、文件快捷读写、带调用栈的错误处理。这些功能标准库不提供,开发者要么自己造轮子,要么引入多个零散依赖。gookit/goutil 把这些操作集中到一个库中,共计 900 多个函数,累积了 2.3k Star。

goutil 覆盖了 Go 开发的常见基础操作,按功能划分为约二十个子包,每个子包独立、零外部依赖,按需导入即可。

变量打印:dump

Go标准库的 fmt.Println 打印嵌套结构体或切片时,输出挤在一行。dump 子包提供了类似 PHP var_dump 的变量打印功能,自动展开嵌套结构、标注类型和长度,同时显示调用位置:

go 复制代码
dump.P(
    23,
    []string{"ab", "cd"},
    map[string]interface{}{
        "key": "val", "sub": map[string]string{"k": "v"},
    },
)

输出按层级缩进,每个元素占据独立一行,嵌套再深也能看清结构。

错误处理:errorx

Go 1.13 引入了 %werrors.Is/As 来做错误包裹与判断。errorx 在此基础上增加了调用栈。用 errorx.New 替代 errors.New,或 errorx.Wrap 包裹已有 error,打印时自动附带从错误创建位置到当前调用链的完整堆栈:

go 复制代码
err := errorx.New("the error message")
fmt.Println(err)
// 输出 error message,同时附带 STACK 调用链

对于多层嵌套调用的项目,比原始 error 多了定位来源的直接信息。

时间处理:timex

timex 是对 time.Time 的增强封装。除了 DateFormat 支持 Y-m-d H:i:s 模板语法,还内置了常用边界方法:DayStart() 获取当天零点、DayEnd() 获取当天最后一刻、NowAddDay() 快速计算偏移日期。时间差的人性化显示也直接提供:

go 复制代码
now := timex.Now()
fmt.Println(now.DayStart())
fmt.Println(now.DateFormat("Y-m-d H:I:S"))

其他子包速览

  • arrutil:数组差集、交集、并集、过滤、映射、去重、随机取值
  • strutil:字符串检查、转换、编码、截取、格式化
  • fsutil:文件读写、目录遍历、路径查找、MIME检测、ZIP解压
  • maputil :深度取值 DeepGet、Map合并、扁平化、与数组互转
  • mathutil:数值范围判断、Min/Max、类型安全转换(Int/Int64/Uint,均带错误返回)
  • jsonutil :JSON编解码、美化输出、带注释JSON的 StripComments
  • cliutil:终端输入读取(含密码输入)、命令行解析、命令执行
  • envutil:环境变量读取、系统类型判断(IsWin/IsMac/IsLinux)、终端色彩支持检测
  • cflag :对 flag.FlagSet 的增强封装,支持快捷参数映射、枚举选项、KV参数

全部子包合计超过 900 个函数,覆盖了 Go 开发中需要反复编写的工具代码。


安装使用

shell 复制代码
go get github.com/gookit/goutil

根包的函数可以直接调用:

go 复制代码
import "github.com/gookit/goutil"

goutil.IsEmpty(nil)      // true
goutil.String(23)        // "23"
goutil.Int("-2")         // 2
goutil.Contains("abc", "a") // true

各子包独立导入,互不耦合,不会引入不需要的代码。


goutil 定位是"Go日常开发的补齐层"。它不是框架,不规定项目结构,每个子包都是独立可用的工具集。对于不想在每个项目中反复实现 ContainsReverseDeepGet 这类函数的 Go 开发者来说,goutil 提供了一个经过验证的集中方案。

相关推荐
怕浪猫13 小时前
FDE 最大的浪费不是写出有 bug 的代码,而是漂亮地解决了一个错误的问题
面试·架构·github
黄敬峰16 小时前
Next.js 全栈实战:数据清洗、ORM 设计与 AI Prompt 工程最佳实践
面试·github
峰向AI20 小时前
AI reads books:用 AI 逐页「啃」PDF 的知识提取器,一个脚本搞定一切
github
Experience-摆渡1 天前
GitHub 47万星免费公共API清单深度调研:收录规模、维护现状与实测
github
逛逛GitHub1 天前
GitHub 上 2.5 万星星的开源 Skill 让 AI 画出漂亮图表。
github
Cosolar1 天前
一文弄懂 Agent Harness 与 Agent Runtime 的区别
java·后端·github
YH55269841 天前
如何减少大模型的token消耗?日常使用,可以通过什么方式减少大模型 token 的消耗
gpt·chatgpt·github
阿里嘎多学长1 天前
2026-08-29 GitHub 热点项目精选
开发语言·程序员·github·代码托管
smileNicky1 天前
GitHub Pull Request 指南:从 Fork 到 Merge 的图文实战教程
github
CoderJia程序员甲1 天前
GitHub 热榜项目 - 周榜(2026-08-30)
ai·大模型·llm·github·ai教程