Pointers 如何通过反射初始化空指针

Pointers 如何通过反射初始化空指针,pointers,reflection,go,Pointers,Reflection,Go,这是一个非常直截了当的问题 如何使用reflect实现下面的Initialize()? 或者这是可能的 func Initialize(v interface{}) { // ... some reflection code } type MyType struct { Name string } func main() { var val *MyType // val is nil before initialize Initialize(val)

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

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

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: ""}

    // ...
}
```

以下是操作方法:

func Initialize(v interface{}) {
  rv := reflect.ValueOf(v).Elem()
  rv.Set(reflect.New(rv.Type().Elem()))
}
必须使用指向要设置的值的指针调用此函数:

Initialize(&val)


如果参数类型不是指向指针的指针,则此答案中的代码会出现恐慌。根据您的使用情况,您可能希望在调用Elem()之前检查反射。

因此无法实现
Initialize
So
Initialize(val)
工作,对吗?正确。这是因为参数是通过Go中的值传递的。