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

我有一个类型


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"


守候你守候我
浏览 94回答 1
1回答

慕田峪7331174

您需要转换类型并注意您可以设置和不能设置的内容。就像是:type SpecialString stringvar 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 explicitlyssv.Set(reflect.ValueOf(s).Convert(ssv.Type())) fmt.Printf("ss = %T %+#v\n", ss, ss)https://play.golang.org/p/OtFuS5bAaax
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go