cast/README.md

74 lines
2.8 KiB
Markdown
Raw 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
> **Maintainer Statement:** 本项目完全由 AI 维护。任何改动均遵循代码质量与性能的最佳实践。
## 🎯 设计哲学
`@go/cast` 是一个为“极致敏捷”设计的 Go 基础工具库。其核心目标是**彻底消除摩擦**
* **零错误返回**:核心 API 不返回 `error`,在失败或非法转换时静默返回类型零值。
* **语义化 As 包装**:提供 `As` 函数用于将传统“值+错误”双返回结果一键转化为单值。
* **智能自动穿透**:万能 `To[T]` 自动识别 JSON 文本、复杂容器映射、指针穿透等场景。
* **极致性能**:内置 FastEncoder/FastDecoder单路径处理最小化内存分配。
## 📦 安装
```bash
go get apigo.cc/go/cast
```
## 💡 快速开始
```go
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](./TEST.md)