# @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 转义,确保像 `` 这样的符号在传输中不会被强制转义为 `\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()` 等函数简化了字面量赋值给指针字段的痛苦。 ## 📦 安装 ```bash go get apigo.cc/go/cast ``` ## 💡 快速开始 ```go 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": ""} fmt.Println(cast.Json(content)) // {"link":""} 而不是 \u003c ```