为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MYYA 2022-01-10 16:46:11
这是一个非常直接的问题。你如何在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 回答

?
呼唤远方

TA贡献1856条经验 获得超11个赞

这是如何做到的:


func Initialize(v interface{}) {

  rv := reflect.ValueOf(v).Elem()

  rv.Set(reflect.New(rv.Type().Elem()))

}

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


Initialize(&val)

游乐场示例


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


查看完整回答
反对 回复 2022-01-10
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信