[英]casting reflected value to type in golang?
是否可以动态地将reflect.Zero/New生成的值转换为任意类型?
https://blog.golang.org/laws-of-reflection似乎建议不要这样做(因为go是静态类型的)。 就我所知,这似乎在很大程度上限制了反射的使用,因为您始终需要了解所使用的类型。
这是我的意思的示例:
package main
import (
"fmt"
"reflect"
)
type A struct {
Name string
}
func main() {
a := &A{Name: "Dave"}
fmt.Println(a)
//create a nil pointer of an arbitrary type
dynamicType := reflect.TypeOf(a)
dynamicNil := reflect.Zero(dynamicType).Interface()
a = dynamicNil //is it possible to do this without explicitly casting to A (ie. avoiding `a = dynamicNil.(*A)`)
fmt.Println(a)
}
您的问题的散文和代码矛盾。
在您的代码中, dynamicNil
具有类型interface{}
,而不是散文建议的reflect.Value
。 作为a
有具体类型*A
你必须键入断言dynamicNil
到*A
。 没有办法解决。
还要注意,Go没有强制类型转换,只有类型转换和断言。
编辑:也许您正在寻找reflect.Value.Set
? 我不清楚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.