@go/cast
@go/cast 是一个为“敏捷开发”设计的 Go 基础工具库。它的设计初衷是打破 Go 语言严苛类型系统带来的繁琐摩擦,让开发者在处理数据转换时能够拥有类似 JavaScript 或 PHP 的丝滑体验。
🎯 设计哲学
- 弱化类型摩擦:在业务逻辑中,我们不应该被
if err != nil的类型转换填满。cast倾向于返回“合理的默认值”而不是错误,让你专注于核心业务流。 - 补足语言短板:Go 缺失了像三元运算符 (
a ? b : c) 这样简洁的语法。cast通过泛型工具类(If,Switch,In)将其补回。 - 去标签化 (No JSON Tags):我们不希望在每一个 Struct 字段后都手动写上
`json:"name"`。cast的序列化工具能自动处理 Go 的大写导出规则,将其转换为更符合接口惯例的小写 Key。 - 数据直觉:序列化应该保持数据的本色。我们默认禁用了 HTML 转义,确保像
<a>这样的符号在传输中不会被强制转义为\u003c。
🚀 核心特性
- 强制转换:
Int(),String(),Bool(),Float()等函数支持多种原始类型及其指针的平滑转换。 - 泛型工具:
If(cond, a, b):类型安全的三元运算符替代品。In(slice, target):一行代码判断包含关系。Switch(index, ...args):基于索引的快速分支选择。
- 现代化 JSON:
Json()/JsonP():默认不转义 HTML 字符。FixedJson():自动将 Struct 字段首字母改为小写,无需维护 JSON Tag。
- 指针辅助:
StringPtr(),IntPtr()等函数简化了字面量赋值给指针字段的痛苦。
📦 安装
go get apigo.cc/go/cast
💡 快速开始
import "apigo.cc/go/cast"
// 1. 像 JS 一样转换
age := cast.Int("18") // 18
name := cast.String(123) // "123"
// 2. 泛型三元运算
status := cast.If(isAdmin, "Admin", "User") // 类型自动推导
// 3. 自动首字母小写的 JSON (无需 Tag)
type User struct { Name string }
u := User{Name: "Tom"}
js := cast.FixedJson(u) // {"name":"Tom"}
// 4. 特殊字符不转义
content := map[string]string{"link": "<a>"}
fmt.Println(cast.Json(content)) // {"link":"<a>"} 而不是 \u003c
Languages
Go
100%