cast/README.md

2.8 KiB
Raw Blame History

@go/cast

Maintainer Statement: 本项目完全由 AI 维护。任何改动均遵循代码质量与性能的最佳实践。

🎯 设计哲学

@go/cast 是一个为“极致敏捷”设计的 Go 基础工具库。其核心目标是彻底消除摩擦

  • 零错误返回:核心 API 不返回 error,在失败或非法转换时静默返回类型零值。
  • 语义化 As 包装:提供 As 函数用于将传统“值+错误”双返回结果一键转化为单值。
  • 智能自动穿透:万能 To[T] 自动识别 JSON 文本、复杂容器映射、指针穿透等场景。
  • 极致性能:内置 FastEncoder/FastDecoder单路径处理最小化内存分配。

📦 安装

go get apigo.cc/go/cast

💡 快速开始

import "apigo.cc/go/cast"

// 1. 万能转换 (To[T] 永不报错,遇错返回零值)
age := cast.To[int]("18")   // 18
uid := cast.To[int]("abc")  // 0 (静默失败)

// 2. 传统函数消除摩擦 (As 将双返回包装为单值)
b := cast.As(json.Marshal(data)) // 返回 []byte忽略 error

// 3. 智能 JSON 自动转换
// 输入 map/struct -> 目标 string: 自动序列化
js := cast.To[string](map[string]int{"age": 18}) // `{"age":18}`

// 输入 string/[]byte -> 目标 struct/map: 自动反序列化
user := cast.To[User](`{"name":"Tom"}`)

// 4. 复杂容器转换 (Map/Slice)
m := cast.ToMap[string, int]([]any{"id", "1", "score", 100}) 
list := cast.To[[]int]([]string{"1", "2", "3"})

🛠 API 指南

核心 API

  1. 通用转换

    • To[T any](any) T —— 万能转换入口。支持基础类型、Slice、Map 以及 JSON 的双向自动转换。失败时返回类型零值。
    • As[T any](v T, err error) T —— 错误消除工具。将传统的 (value, error) 返回值包装为单值。
  2. 容器转换

    • ToMap[K, V](any) map[K]V —— 构建新 Map。
    • ToSlice[T](any) []T —— 构建新 Slice。
    • FillMap(target, source) | FillSlice(target, source) —— 填充现有容器。
  3. JSON 序列化与构建

    • 编码: ToJSON(any) string | ToJSONBytes(any) []byte
    • 解码: UnmarshalJSON(data, target) error (底层 API保留 error 用于调试) | FromJSON[T](any) T
    • 进阶: ToJSONDesensitizeBytes(any, []string) []byte (支持字段脱敏) | PrettyToJSON(any) string
  4. 泛型工具

    • If[T any](bool, T, T) T —— 三元逻辑。
    • In[T comparable]([]T, T) bool —— 包含判断。
    • Ptr[T any](T) *T —— 快速取指针。
    • ArrayToBoolMap[T comparable]([]T) map[T]bool —— 快速构建索引 Map。
  5. 基础转换 (直接调用,极致性能)

    • Int, Int64, Uint, Uint64, Float, Float64, String, Bool, Duration

🧪 验证状态

测试全部通过,性能达标。详见:TEST.md