cast/README.md

51 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# @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()` 等函数简化了字面量赋值给指针字段的痛苦。
## 📦 安装
```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": "<a>"}
fmt.Println(cast.Json(content)) // {"link":"<a>"} 而不是 \u003c
```