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 引入了 %w 和 errors.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日常开发的补齐层"。它不是框架,不规定项目结构,每个子包都是独立可用的工具集。对于不想在每个项目中反复实现 Contains、Reverse、DeepGet 这类函数的 Go 开发者来说,goutil 提供了一个经过验证的集中方案。

相关推荐
用户202252215065 小时前
我在 DSH 做了个 AI 交付验收台:没有证据,就不算通过
github
前端市界6 小时前
Pro React Admin: 统一工程底座,承载多种应用...
前端·github
穆梓兰煊10 小时前
Rust 重写 AI 基础设施的工程逻辑
github
邱杰47011 小时前
数智人事系统(三):Spring Boot 3.4 骨架与配置分层
github
空空dream12 小时前
Github | 初始化空白仓库到首次推送
github
高频因子挖掘机14 小时前
A股分钟K线数据占内存:先缩小请求范围,还是换 DataFrame 工具?
后端·github·api
miofly15 小时前
Karpathy:75%人口未接触LLM,约5000人可用的内部系统已让数千智能体协作数周
开源·github
zjh102416 小时前
和 AI 一起写了个 MCP 客户端,结果最难的不是协议
github