golang,go,博客,开源,编程
viant/toolbox
是一个由 Viant 开发的功能丰富的 Go 工具库,它集合了大量常用的实用工具函数,涵盖字符串、时间、反射、文件、HTTP、配置处理等多个方面,是“工具人”写项目时不可多得的瑞士军刀型库。
toolbox
是一个“啥都能干点”的 Go 通用工具库,适合需要各种小功能支持但又不想一一造轮子的开发者。
它的模块设计清晰,大致可以分为以下几个子包:
包名 | 用途介绍 |
---|---|
collection | 集合操作辅助,如 Set 、LinkedList 等 |
format | 格式化辅助,如模板渲染、SQL 拼接等 |
secret | 加解密相关(对称/非对称加密) |
storage | 抽象存储接口,支持本地和云存储(如 GCS) |
conversion | 类型转换工具 |
reader | 多种数据源读取能力(支持 CSV、JSON、INI 等) |
fileutil | 文件与目录操作 |
process | 外部进程启动与管理 |
shell | Shell 命令封装执行 |
url | URL 构建、解析等 |
reflect | 反射封装工具 |
data | 数据处理,如 Map/Struct 转换等 |
assert | 简易测试断言工具 |
http | HTTP 请求辅助封装 |
path | 路径拼接、模式匹配等 |
config | 配置读取与动态更新 |
conversion
import "github.com/viant/toolbox/conversion"
val, err := conversion.ToInt("42")
fmt.Println(val) // 输出:42
支持常见类型之间的安全转换,能帮你少写很多 strconv.Itoa()
、strconv.ParseFloat()
。
fileutil
import "github.com/viant/toolbox/fileutil"
exists := fileutil.FileExists("config.yaml")
fmt.Println("文件是否存在:", exists)
除了判断文件/目录是否存在,还支持:
reflect
import "github.com/viant/toolbox/reflect"
type User struct {
Name string
Age int
}
user := &User{}
reflect.SetField(user, "Name", "张三")
reflect.SetField(user, "Age", 18)
fmt.Printf("%+v\n", user) // 输出:{Name:张三 Age:18}
直接通过字符串操作结构体字段,极其方便做配置绑定、对象动态处理。
data
import "github.com/viant/toolbox/data"
user := map[string]interface{}{
"name": "小明",
"age": 30,
}
jsonText, _ := data.AsJSON(user, true)
fmt.Println(string(jsonText))
也可以将 JSON 字符串转成 map
或者任意结构体。
config
+ reader
import (
"github.com/viant/toolbox/config"
)
var cfg struct {
Port int `config:"port"`
}
_ = config.Load(&cfg, "config.yaml")
fmt.Println(cfg.Port)
支持从 YAML、JSON、ENV 等文件/环境变量加载配置,并绑定到结构体。
http
import toolboxHttp "github.com/viant/toolbox/http"
response, err := toolboxHttp.NewHttpClient().Get("https://httpbin.org/get")
fmt.Println(response.StatusCode)
简化了 HTTP 请求构建、响应解析的过程,适合快速调 API。
process
import "github.com/viant/toolbox/process"
proc, err := process.NewProcess("ls", "-la")
out, err := proc.Output()
fmt.Println(string(out))
支持进程输出抓取、异步启动等,适合执行 CLI 工具或脚本。
go get github.com/viant/toolbox