使用reflect,如何初始化struct指针字段的值?

时间:2013-05-09 06:51:30

标签: go

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    D *int
}

func main() {
    a := &A{}
    v := reflect.ValueOf(a)
    e := v.Elem()
    f := e.Field(0)
    z := reflect.Zero(f.Type().Elem())
    f.Set(z)
    fmt.Println(z)
}

panic:reflect.Set:int类型的值不能分配给类型* int

如何将* D设置为默认值使用反射

2 个答案:

答案 0 :(得分:13)

您需要有一个指针值(* int),但reflect文档指出func Zero(typ Type) Value

  

返回的值既不可寻址也不可设置。

在您的情况下,您可以使用New

z := reflect.New(f.Type().Elem())

答案 1 :(得分:2)

试试这个

var i int
f.Set(reflect.ValueOf(&i))