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
SoInitialize(val)
工作,对吗?正确。这是因为参数是通过Go中的值传递的。