feat: 支持反射设置指针类型字段
- 如果目标字段是指针类型,它会尝试直接赋值(如果类型兼容),或创建一个新指针并递归设置其指向的值。 - `rfx_example_test.go` 中新增了测试用例,以验证对 `*string` 等指针字段的设置功能。
This commit is contained in:
21
rfx.go
21
rfx.go
@@ -257,6 +257,27 @@ func (r *rfx) setValue(field reflect.Value, v any) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
// 处理指针类型
|
||||
if field.Type().Kind() == reflect.Ptr {
|
||||
// 如果传入的值已经是指针类型,尝试直接赋值
|
||||
if val.Type().AssignableTo(field.Type()) {
|
||||
field.Set(val)
|
||||
return true
|
||||
}
|
||||
|
||||
// 如果传入的值不是指针,创建新指针并设置值
|
||||
elemType := field.Type().Elem()
|
||||
newPtr := reflect.New(elemType)
|
||||
|
||||
// 递归设置指针指向的值
|
||||
if !r.setValue(newPtr.Elem(), v) {
|
||||
return false
|
||||
}
|
||||
|
||||
field.Set(newPtr)
|
||||
return true
|
||||
}
|
||||
|
||||
// 优先使用 cast 进行智能类型转换
|
||||
// 这样可以处理 string <-> number, number <-> bool 等常见转换
|
||||
targetType := field.Type()
|
||||
|
||||
Reference in New Issue
Block a user