我有类型
type SpecialString *string
我有两个反射值,aVal
和bVal
(请注意,aVal
和bVal
的类型为reflect.Value
)
aVal.Type() // *SpecialString
bVal.Type() // *string
在常规代码中,我可以创建c
,这是指向特殊字符串的指针,如下所示:
a := "foo"
b := SpecialString(&a)
c := &b
如何使用反射实现相同的目的?
aval.Set(bVal) // does not work: "reflect.Set: value of type *string is not assignable to type *SpecialString"
答案 0 :(得分:1)
您需要转换类型,并注意可以设置和不能设置的内容。像这样:
type SpecialString string
var s string = "source regular string"
var ss SpecialString
// Get the reflect.Value of the thing &ss pointing at.
ssv := reflect.ValueOf(&ss).Elem()
// You need to convert string to SpecialString explicitly
ssv.Set(reflect.ValueOf(s).Convert(ssv.Type()))
fmt.Printf("ss = %T %+#v\n", ss, ss)