@go/cast

@go/cast 是一个为“敏捷开发”设计的 Go 基础工具库。它的设计初衷是打破 Go 语言严苛类型系统带来的繁琐摩擦,让开发者在处理数据转换时能够拥有类似 JavaScriptPHP 的丝滑体验。

🎯 设计哲学

  • 弱化类型摩擦:在业务逻辑中,我们不应该被 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
Description
基础类型强制转换工具库
Readme MIT 45 KiB
Languages
Go 100%