如何使用反射设置用户定义类型的值?

时间:2018-11-01 22:58:47

标签: go

我有类型

type SpecialString *string

我有两个反射值,aValbVal(请注意,aValbVal的类型为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"

1 个答案:

答案 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)

https://play.golang.org/p/OtFuS5bAaax