go - 如何使用反射设置用户定义类型的值?
问题描述
我有一个类型
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"
解决方案
您需要转换类型并注意可以设置和不能设置的内容。就像是:
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)
推荐阅读
- r - R如何检测字符串是否包含电子邮件地址并提取电子邮件地址和前5个单词?
- arrays - 在 Studio 3T for MongoDB 中使用 SQL 查询数组
- jenkins - 詹金斯管道在容器内构建
- apache-kafka - Kafka KTables 的性能基准
- html - Lighthouse - robots.txt 错误语法不理解
- clojure - Clojure 代理使用受保护的构造函数实现抽象类
- python - 将图像轮廓与另一张图像合并
- javascript - 查找对象数组中每个索引的平均值?
- ruby - 如何将哈希实例化为对象(红宝石)
- python - Python /处理 - 如何在椭圆距离内单击鼠标并更改颜色