|
|
72d670be0b
|
feat: 增强 map 大小写不敏感支持和函数重命名
- 新增 tryMapFieldKey 函数,返回 map 中实际存在的键(支持大小写转换)
- 优化 setFieldValue 方法,使用 tryMapFieldKey 查找已存在字段并更新
- 优化 setNestedValue 方法,修复嵌套 map 大小写处理和 interface 包装问题
- 重命名函数以提高代码清晰度:
- tryStructField → tryStructFieldValue
- tryMapField → tryMapFieldValue
- tryMapFieldWithKey → tryMapFieldKey
- 新增 rfx_map_case_test.go 包含 16 个测试用例,覆盖基本、嵌套、边界等场景
|
2025-12-09 16:55:13 +08:00 |
|
|
|
fbba6f9a30
|
feat: 增强 nil 值处理能力
主要改进:
- 简化 setValue 方法中的 nil 值处理逻辑,统一设置为目标类型的零值
- 修复 setFieldValue 方法中 map 类型设置 nil 值时的问题
- 新增完整的 nil 值设置测试,覆盖所有 Go 基础类型和复合类型
测试覆盖:
- 指针、接口、切片、map、channel、func 等可空类型设置为 nil
- int/uint 系列、float 系列、bool、string 等基础类型设置为零值
- 嵌套结构体和 map 中的 nil 值设置
|
2025-12-09 15:11:18 +08:00 |
|
|
|
6e3593f188
|
feat: 优化 setValue 方法支持 nil 值处理
改进 setValue 方法在处理 nil 值时的行为:
- 对于可空类型(指针、接口、切片、map 等)设置为零值而非失败
- 对于基础类型(int、string、bool 等)继续执行 cast 转换逻辑
- 修复 val 无效时调用 val.Type() 的潜在空指针问题
|
2025-12-09 14:56:37 +08:00 |
|
|
|
bacec92841
|
feat: Append 方法支持 R 接口包装的指针类型
增强 setValue 函数,支持将 R 接口包装的指针值追加到非指针类型的切片中。当源值是指针但目标不是指针时,自动解引用后再赋值,使得 New(&item) 可以追加到 []Item 类型的切片。同时统一使用 Raw() 方法替代 Value() 方法名。
|
2025-12-08 17:24:45 +08:00 |
|
|
|
f5f261e541
|
feat: R 接口支持 JSON 序列化和反序列化
实现功能:
- R 接口继承 json.Marshaler 和 json.Unmarshaler 接口
- MarshalJSON(): 将 R 实例序列化为 JSON 字节数组
- UnmarshalJSON(): 从 JSON 字节数组反序列化到 R 实例
核心特性:
- 支持 struct、map、slice 等所有类型的 JSON 序列化
- 支持嵌套结构的序列化和反序列化
- 自动智能类型转换(如 JSON 数字 float64 -> int/int64)
- 可以对嵌套字段单独序列化(如 rfx.Get("Address"))
测试覆盖:
- TestJSONMarshal: 测试各种类型的序列化
- TestJSONUnmarshal: 测试各种类型的反序列化
- TestJSONRoundTrip: 测试序列化和反序列化的往返一致性
文档更新:
- 在 README 特性列表中添加 JSON 序列化说明
- 新增"JSON 序列化和反序列化"章节
- 包含完整的使用示例和最佳实践
- 说明使用场景:API通信、配置持久化、数据传输、缓存、消息队列等
|
2025-12-08 17:22:05 +08:00 |
|
|
|
a6a936c07c
|
feat: 增强 map 类型转换的容错能力
优化了所有 map 类型转换方法,采用三层转换策略:
1. 优先使用 cast 库进行类型转换
2. cast 失败后,通过 Keys() 和 Get() 进行自定义转换
3. 转换失败时提供完整的错误信息(包含 cast 错误和自定义转换错误)
优化的方法:
- StringMapString()
- StringMapStringSlice()
- StringMapBool()
- StringMapInt()
- StringMapInt64()
- StringMap()
这使得 struct 类型也能成功转换为 map 类型,增强了类型转换的灵活性。
|
2025-12-08 11:16:44 +08:00 |
|
|
|
9e1bc55a8c
|
feat: 增强类型转换能力和代码重构
核心改进:
1. 新增 normalizeInputValue 函数
- 统一处理输入值的规范化,支持 R 接口、[]R 切片、reflect.Value
- 避免重复封装,提升性能和类型安全性
2. 重构 getValueByPath 为独立函数
- 从 rfx 方法提取为独立函数,提高代码复用性
- 更好的职责分离,便于维护和测试
3. 显著增强 setValue 方法的类型转换能力
- 支持切片类型转换:[]any -> []T,自动转换每个元素
- 支持结构体类型转换:map -> struct 或 struct -> struct,按字段名匹配
- 保持指针切片的引用语义,避免不必要的对象复制
4. 新增 tryMapField 函数
- 支持 Map 键名的大小写不敏感访问
- 首字母大写的键会自动尝试小写版本(如 "Host" -> "host")
5. 新增 lowercaseFirst 辅助函数
- 用于首字母小写转换,配合 Map 键名查找
6. 更新测试用例
- 新增指针切片的使用示例
- 展示 []any 包含指针元素的场景
7. 文档全面更新
- 新增"高级类型转换"章节,详细说明切片、结构体、指针切片等转换
- 更新特性列表,突出增强的类型转换能力和 R 接口集成
- 补充 Map 大小写不敏感访问的说明
影响范围:
- reflux.go: 使用 normalizeInputValue 统一输入处理
- rfx.go: 重构并增强 setValue、getValueByPath 等核心方法
- util.go: 新增多个辅助函数,代码行数增加 160 行
- rfx_example_test.go: 新增指针切片测试用例
向后兼容:完全兼容现有 API,仅增强内部实现和类型转换能力
|
2025-12-05 11:12:11 +08:00 |
|
|
|
243d1ffac8
|
feat: 在 rfx.String() 中,先尝试用 cast.ToStringE 将当前值转为字符串,如果失败则增加了一个兜底逻辑:尝试使用 json.Marshal 将当前值序列化为 JSON 字符串并返回
|
2025-12-04 14:09:23 +08:00 |
|
|
|
b373dde7f7
|
feat: 支持切片追加及 -1 头部插入
|
2025-12-04 11:28:18 +08:00 |
|
|
|
cbe079ddcd
|
feat: 支持反射设置指针类型字段
- 如果目标字段是指针类型,它会尝试直接赋值(如果类型兼容),或创建一个新指针并递归设置其指向的值。
- `rfx_example_test.go` 中新增了测试用例,以验证对 `*string` 等指针字段的设置功能。
|
2025-12-04 11:25:44 +08:00 |
|
|
|
d9f178020a
|
first commit
|
2025-12-02 19:52:29 +08:00 |
|