cast/CHANGELOG.md

88 lines
5.7 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.

# CHANGELOG
## [v1.2.6] - 2026-05-04
### Fixed
- **Map 深度合并修复**: 修复了在 `Convert``ToMap` 过程中,如果目标 Map 已存在该 Key其原有结构体/Map 值会被直接覆盖而非深度合并的问题。通过引入 `dst.MapIndex` 预读取与临时寻址变量,现已完美支持 Map 下非指针结构体的局部字段覆盖。
### Added
- **深度合并测试集**: 新增 `merge_test.go``complex_conversion_test.go`,覆盖了 Struct-to-Map, Map-to-Map, Slice-to-Map 等多种深度嵌套合并场景,确保配置覆盖逻辑的健壮性。
## [v1.2.3] - 2026-05-04
### Added
- **强大的时间解析引擎**: 移植 `time` 模块的核心算法至 `cast.ParseTime`支持时间戳秒至纳秒、RFC3339、JS 格式、紧凑格式20060102150405及中文日期解析。
- **时间操作 API**: 新增 `FormatTime(layout, v)` 支持直观格式化YYYY-MM-DD新增 `AddTime(expr, v)` 支持 DSL 时间加减(+1Y-2M
- **时区上下文支持**: 引入 `TimeZone` 类型及全局 `DefaultTimeZone`,支持 `SetDefaultTimeZone` 统一控制全项目的转换时区。
### Optimized
- **ToTime 升级**: 重构 `ToTime` 底层,默认调用高性能 `ParseTime` 引擎,并强制转换至 `DefaultTimeZone` 时区。
- **JSON 时间处理**: `FastEncoder``FastDecoder` 现已深度集成 `DefaultTimeZone`,确保序列化与反序列化时的时区一致性。
## [v1.2.2] - 2026-05-04
### Added
- **深度对象映射引擎**: 移植 `convert` 包的核心能力至 `cast.Convert`
- **Convert API**: 新增 `Convert(dst, src any)` 入口,支持深度转换与原地更新,遵循 Go 语言参数哲学。
- **Func 转换支持**: 原生支持 `func``func` 的自动类型适配与包装。
- **CSV 自动解析**: `To[[]T]``Convert` 现支持自动将逗号分隔字符串解析为切片。
- **ParseHook 支持**: 支持结构体字段的自定义 `ParseFieldName` 钩子函数。
- **自我转换保护**: 增加指针地址校验,防止 `Convert(a, a)` 导致的死循环或无效开销。
### Optimized
- **极致性能重构**: 实现 `performRecursiveTo` 递归引擎,全面消灭内存逃逸,对象映射性能提升 ~40%,内存分配减少 ~75%。
- **覆盖赋值语义**: 修正单值转切片的语义,从“追加”改为“覆盖赋值”。
- **Bool 强制转换优化**: 重构 `Bool()` 底层分支逻辑,提升 CPU 分支预测友好度。
### Removed
- **convert 模块**: 正式移除外部 `apigo.cc/go/convert` 依赖,功能全部合并至 `cast`
## [v1.2.1] - 2026-05-04
### Added
- **Encoder 元数据缓存**: 引入 `encoderStructDescriptor` 缓存,大幅减少结构体序列化时的反射开销。
- **time.Time 全局支持**:
- Encoder/Decoder 原生支持 `time.Time` 类型。
- 默认使用格式 `2006-01-02 15:04:05.000`
- 支持通过 Struct Tag 指定格式(如 `json:"format=2006-01-02"`)。
- **零分配摩擦匹配**: 重构 Decoder 匹配逻辑,实现 `normalizeEqual` 算法,在忽略大小写/下划线匹配时彻底消除内存分配。
### Optimized
- **Encoder 性能**:
- 采用 `MapRange` 代替 `MapKeys` 遍历 Map减少中间切片分配。
- 延迟 Path 路径计算,仅在开启脱敏字典时计算路径。
- 重写 `writeString`,支持批量写入与高效查表转义。
- **Decoder 性能**:
- 优化 `decodeArray` 扩容策略,优先尊重并使用用户预设的 Capacity。
- **移除 Map 排序**: 序列化 Map 时不再进行 Key 排序,显著提升大规模 Map 的处理速度。
## [v1.2.0] - 2026-05-04
### Added
- **零摩擦 API**: 核心 API `To[T]`, `ToJSON`, `FromJSON`, `ToMap`, `ToSlice` 全部重构为**不返回错误**,遇错静默返回零值。
- **As 包装器**: 原 `Quiet` 更名为 `As`,用于一键消除传统 `(value, error)` 函数的摩擦。
### Removed
- **YAML 支持**: 移除 `gopkg.in/yaml.v3` 依赖。
- **Must/As[T] 系列**: 移除 `Must` 及所有特殊的 `AsXxx` 系列函数,统一通过 `To[T]``As` 包装实现。
- **冗余 API**: 移除 `PrettyToJSONBytes``ToJSONDesensitize`,保留对应的 `PrettyToJSON``ToJSONDesensitizeBytes`
## [v1.1.2] - 2026-05-04
### Added
- 新增 `ToMap``ToSlice`: 侧重于原地填充/追加,支持 Struct 继承拍平、KV 序列化与自动类型转换。
- 新增 `MakeMap`, `MakeSlice`, `FromJSON`, `FromYAML` 系列: 泛型构建新对象的零摩擦 API。
- 增强 `UnmarshalJSON` / `UnmarshalYAML`: 重构为副作用模式(返回 error支持多种输入类型。
### Removed
- 移除 `Ints``Strings`: 由更通用的 `MakeSlice` 替代,保持 API 简洁。
## [v1.1.1] - 2026-04-12
- **修复**: 解决 `FastEncoder` 在编码结构体时忽略匿名嵌入Embedded字段的问题确保组合对象的完整序列化。
## [v1.1.0] - 2026-05-02
- **功能**: 新增 `FastEncoder`,实现单路径 JSON 编码,大幅提升性能并减少内存分配。
- **功能**: 新增 `ToJSONDesensitize``ToJSONDesensitizeBytes`,支持原生字段脱敏。
- **功能**: 新增 `FastDecoder`,实现单路径流式 JSON 解析,支持“零摩擦” Key 匹配(大小写不敏感、归一化映射)。
- **优化**: 完善 `null` 值处理逻辑,区分 `nil` 指针与空 `slice`/`map`
- **重构**: 移除旧版 `makeJSONType` 等冗余逻辑,代码结构更简洁高效。
## [v1.0.4] - 2026-04-30
- **优化**: 重构 `UniqueAppend`,改用 Map 查重,性能提升至 $O(n)$。
- **优化**: 提升 `If` 函数参数描述性,符合工程规范。
- **优化**: 精简 `parseInt`/`parseUint` 逻辑,减少冗余字符串扫描。
- **优化**: 优化 `FixUpperCase` 内部字符处理,引入位运算提升效率。