首页 > 解决方案 > 如何使用反射设置用户定义类型的值?

问题描述

我有一个类型

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"

标签: go

解决方案


您需要转换类型并注意可以设置和不能设置的内容。就像是:

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


推荐阅读