如何简化从reflect.Value生成泛型类型值的Go代码实现?
更简洁的reflect.Value转泛型类型实现方式
你的这段代码可以进一步简化——原逻辑里两次反射中转(先赋值给any再转给目标变量)的步骤完全可以省略,直接利用reflect.Value的Interface()方法结合类型断言就能完成转换:
func toValue[T any](v reflect.Value) T { return v.Convert(reflect.TypeFor[T]()).Interface().(T) }
简化说明
- 原代码中的
Convert操作已经确保v的类型与泛型T一致,此时调用Interface()会返回一个实际类型为T的any值 - 直接通过类型断言
.(T)将any转换为目标泛型类型T,省去了额外的反射赋值操作,代码更简洁,性能也略有提升 - 该实现的行为与原代码完全一致:如果
Convert操作失败会触发panic,转换成功则返回正确的T类型值
内容的提问来源于stack exchange,提问作者jws
相关产品推荐
相关产品推荐

