2026-04-30 22:16:01 +08:00
|
|
|
|
# CHANGELOG
|
|
|
|
|
|
|
2026-05-04 23:48:00 +08:00
|
|
|
|
## [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 等多种深度嵌套合并场景,确保配置覆盖逻辑的健壮性。
|
|
|
|
|
|
|
2026-05-04 14:10:18 +08:00
|
|
|
|
## [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`。
|
|
|
|
|
|
|
2026-05-04 12:15:34 +08:00
|
|
|
|
## [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 的处理速度。
|
|
|
|
|
|
|
2026-05-04 10:41:34 +08:00
|
|
|
|
## [v1.2.0] - 2026-05-04
|
|
|
|
|
|
### Added
|
2026-05-04 11:11:37 +08:00
|
|
|
|
- **零摩擦 API**: 核心 API `To[T]`, `ToJSON`, `FromJSON`, `ToMap`, `ToSlice` 全部重构为**不返回错误**,遇错静默返回零值。
|
|
|
|
|
|
- **As 包装器**: 原 `Quiet` 更名为 `As`,用于一键消除传统 `(value, error)` 函数的摩擦。
|
2026-05-04 10:41:34 +08:00
|
|
|
|
### Removed
|
2026-05-04 11:11:37 +08:00
|
|
|
|
- **YAML 支持**: 移除 `gopkg.in/yaml.v3` 依赖。
|
|
|
|
|
|
- **Must/As[T] 系列**: 移除 `Must` 及所有特殊的 `AsXxx` 系列函数,统一通过 `To[T]` 或 `As` 包装实现。
|
|
|
|
|
|
- **冗余 API**: 移除 `PrettyToJSONBytes` 和 `ToJSONDesensitize`,保留对应的 `PrettyToJSON` 和 `ToJSONDesensitizeBytes`。
|
2026-05-04 10:41:34 +08:00
|
|
|
|
|
2026-05-04 09:22:34 +08:00
|
|
|
|
## [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
|
|
|
|
|
|
|
2026-05-02 23:39:10 +08:00
|
|
|
|
- **修复**: 解决 `FastEncoder` 在编码结构体时忽略匿名嵌入(Embedded)字段的问题,确保组合对象的完整序列化。
|
|
|
|
|
|
|
2026-05-02 23:00:44 +08:00
|
|
|
|
## [v1.1.0] - 2026-05-02
|
|
|
|
|
|
- **功能**: 新增 `FastEncoder`,实现单路径 JSON 编码,大幅提升性能并减少内存分配。
|
|
|
|
|
|
- **功能**: 新增 `ToJSONDesensitize` 和 `ToJSONDesensitizeBytes`,支持原生字段脱敏。
|
|
|
|
|
|
- **功能**: 新增 `FastDecoder`,实现单路径流式 JSON 解析,支持“零摩擦” Key 匹配(大小写不敏感、归一化映射)。
|
|
|
|
|
|
- **优化**: 完善 `null` 值处理逻辑,区分 `nil` 指针与空 `slice`/`map`。
|
|
|
|
|
|
- **重构**: 移除旧版 `makeJSONType` 等冗余逻辑,代码结构更简洁高效。
|
|
|
|
|
|
|
2026-04-30 22:16:01 +08:00
|
|
|
|
## [v1.0.4] - 2026-04-30
|
|
|
|
|
|
- **优化**: 重构 `UniqueAppend`,改用 Map 查重,性能提升至 $O(n)$。
|
|
|
|
|
|
- **优化**: 提升 `If` 函数参数描述性,符合工程规范。
|
|
|
|
|
|
- **优化**: 精简 `parseInt`/`parseUint` 逻辑,减少冗余字符串扫描。
|
|
|
|
|
|
- **优化**: 优化 `FixUpperCase` 内部字符处理,引入位运算提升效率。
|