如何通过反映

时间:2016-05-16 15:25:25

标签: pointers reflection go

这是一个非常直截了当的问题。

如何使用Initialize()实现下面的reflect? 或者这可能吗?

func Initialize(v interface{}) {
    // ... some reflection code
}

type MyType struct {
    Name string
}

func main() {
    var val *MyType

    // val is nil before initialize
    Initialize(val)
    // val is now &MyType{Name: ""}

    // ...
}

```

1 个答案:

答案 0 :(得分:3)

以下是如何操作:

func Initialize(v interface{}) {
  rv := reflect.ValueOf(v).Elem()
  rv.Set(reflect.New(rv.Type().Elem()))
}

必须使用指向要设置的值的指针调用此函数:

Initialize(&val)

playground example

如果参数类型不是指向指针的指针,则此答案中的代码会发生混乱。根据您的使用情况,您可能需要在调用Elem()之前检查反映value kind