# @go/cast `@go/cast` 是一个为“敏捷开发”设计的 Go 基础工具库。它的设计初衷是打破 Go 语言严苛类型系统带来的繁琐摩擦,让开发者在处理数据转换时能够拥有类似 **JavaScript** 或 **PHP** 的丝滑体验。 ## 🎯 设计哲学 * **弱化类型摩擦**:`cast` 倾向于返回“合理的默认值”而不是错误,让你专注于核心业务流。 * **补足语言短板**:通过泛型工具类补齐了 Go 缺失的三元运算符。 * **去标签化 (No JSON Tags)**:支持自动处理大写导出规则,无需在每个结构体字段后手动添加 JSON tag。 * **数据直觉**:默认禁用 HTML 转义,保持序列化内容的原始色泽。 ## 🛠 API Reference ### 基础转换函数 所有转换函数均会自动处理多级指针,并在转换失败时返回零值。 - `func Int(v any) int` - `func Int64(v any) int64` - `func Uint(v any) uint` - `func Uint64(v any) uint64` - `func Float(v any) float32` - `func Float64(v any) float64` - `func String(v any) string` - `func Bool(v any) bool` - `func Duration(v string) time.Duration` (支持 100ms 这种 DSL 格式) ### 泛型工具 - `func If[T any](cond bool, a, b T) T`:泛型三元运算符。 - `func Switch[T any](i uint, args ...T) T`:基于索引的选择。 - `func In[T comparable](arr []T, val T) bool`:判断切片是否包含某值。 ### 现代化 JSON & YAML - `func Json(v any) string`:高性能序列化,不转义 HTML 字符。 - `func JsonP(v any) string`:带缩进的格式化输出。 - `func FixedJson(v any) string`:自动将 Struct 字段首字母转为小写。 - `func UnJson(str string, v any) any`:反序列化。 - `func Yaml(v any) string` - `func UnYaml(str string, v any) any` ### 指针辅助 - `func StringPtr(v string) *string` - `func IntPtr(v int) *int` - `func BoolPtr(v bool) *bool` ## 📦 安装 ```bash go get apigo.cc/go/cast ``` ## 💡 快速开始 ```go import "apigo.cc/go/cast" // 像 JS 一样转换 age := cast.Int("18") // 18 // 泛型三元运算 status := cast.If(isAdmin, "Admin", "User") ```