繁体   English   中英

转换反射值以键入golang?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM