cast/CHANGELOG.md

6.3 KiB
Raw Blame History

CHANGELOG

[v1.2.8] - 2026-05-05

Fixed

  • JSON 解码器深度增强: 修复了 cast.UnmarshalJSON 在反序列化到 interface{} 类型字段时会跳过对象和数组的重大缺陷。
  • 高精度整数解析: 优化了 JSON 解码过程中的数字处理逻辑。当目标为 interface{} 时,优先将整数解析为 int64 而非 float64彻底解决了纳秒级时间戳Nanosecond Timestamp和 64 位长 ID 的精度丢失问题。
  • 接口兼容性: 完善了对 interface{} 类型的自动类型识别,支持正确解析为 map[string]any[]any

[v1.2.6] - 2026-05-04

Fixed

  • Map 深度合并修复: 修复了在 ConvertToMap 过程中,如果目标 Map 已存在该 Key其原有结构体/Map 值会被直接覆盖而非深度合并的问题。通过引入 dst.MapIndex 预读取与临时寻址变量,现已完美支持 Map 下非指针结构体的局部字段覆盖。

Added

  • 深度合并测试集: 新增 merge_test.gocomplex_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 时间处理: FastEncoderFastDecoder 现已深度集成 DefaultTimeZone,确保序列化与反序列化时的时区一致性。

[v1.2.2] - 2026-05-04

Added

  • 深度对象映射引擎: 移植 convert 包的核心能力至 cast.Convert
  • Convert API: 新增 Convert(dst, src any) 入口,支持深度转换与原地更新,遵循 Go 语言参数哲学。
  • Func 转换支持: 原生支持 funcfunc 的自动类型适配与包装。
  • 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: 移除 PrettyToJSONBytesToJSONDesensitize,保留对应的 PrettyToJSONToJSONDesensitizeBytes

[v1.1.2] - 2026-05-04

Added

  • 新增 ToMapToSlice: 侧重于原地填充/追加,支持 Struct 继承拍平、KV 序列化与自动类型转换。
  • 新增 MakeMap, MakeSlice, FromJSON, FromYAML 系列: 泛型构建新对象的零摩擦 API。
  • 增强 UnmarshalJSON / UnmarshalYAML: 重构为副作用模式(返回 error支持多种输入类型。

Removed

  • 移除 IntsStrings: 由更通用的 MakeSlice 替代,保持 API 简洁。

[v1.1.1] - 2026-04-12

  • 修复: 解决 FastEncoder 在编码结构体时忽略匿名嵌入Embedded字段的问题确保组合对象的完整序列化。

[v1.1.0] - 2026-05-02

  • 功能: 新增 FastEncoder,实现单路径 JSON 编码,大幅提升性能并减少内存分配。
  • 功能: 新增 ToJSONDesensitizeToJSONDesensitizeBytes,支持原生字段脱敏。
  • 功能: 新增 FastDecoder,实现单路径流式 JSON 解析,支持“零摩擦” Key 匹配(大小写不敏感、归一化映射)。
  • 优化: 完善 null 值处理逻辑,区分 nil 指针与空 slice/map
  • 重构: 移除旧版 makeJSONType 等冗余逻辑,代码结构更简洁高效。

[v1.0.4] - 2026-04-30

  • 优化: 重构 UniqueAppend,改用 Map 查重,性能提升至 $O(n)$。
  • 优化: 提升 If 函数参数描述性,符合工程规范。
  • 优化: 精简 parseInt/parseUint 逻辑,减少冗余字符串扫描。
  • 优化: 优化 FixUpperCase 内部字符处理,引入位运算提升效率。