Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reflection 如何从refect.Value获取结构字段_Reflection_Go - Fatal编程技术网

Reflection 如何从refect.Value获取结构字段

Reflection 如何从refect.Value获取结构字段,reflection,go,Reflection,Go,给定 最后,有没有办法按照Run()方法的设置来检索Z及其字段值 我正在实现一个API命令模式,因此T可以是RegisterCommand,LoginCommand,LogoutCommand等等。Z是“输出文档”-API命令返回的JSON文档-我希望以声明方式指定它,并在命令运行后写入网络。明白了!感谢synful提供的“指针”:) 您的问题是Run()接受一个值接收器。这意味着复制t的值,修改t.Z.A=1仅适用于该副本。因此,您调用它的对象不会被修改。 type Runnable inte

给定

最后,有没有办法按照
Run()
方法的设置来检索Z及其字段值


我正在实现一个API命令模式,因此
T
可以是
RegisterCommand
LoginCommand
LogoutCommand
等等。Z是“输出文档”-API命令返回的JSON文档-我希望以声明方式指定它,并在命令运行后写入网络。

明白了!感谢synful提供的“指针”:)


您的问题是
Run()
接受一个值接收器。这意味着复制
t
的值,修改
t.Z.A=1
仅适用于该副本。因此,您调用它的对象不会被修改。
type Runnable interface {
     Run()
}

type T struct {
    Z struct {
        A int
    }
}

func (t T) Run() {
    t.Z.A = 1
}

func main() {
    t := reflect.TypeOf( T{} )

    var v reflect.Value
    v = reflect.New(t).Elem()

    runnable := v.Interface().(Runnable)
    runnable.Run()
    z := v.Elem().FieldByName("Z").Interface()