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

当类型为 interface{} 时初始化 nil 指针

当类型为 interface{} 时初始化 nil 指针

Go
尚方宝剑之说 2022-08-30 15:07:09
我想知道如何初始化一个指向结构的nil指针,当函数接收此参数为.initializeinterface{}假设我将始终发送一个指针,并且函数的参数类型严格,我如何使此代码工作?interface{}type Foo struct {}func main() {    var foo *Foo    fmt.Println("foo is nil: ", foo)    initialize(foo)    fmt.Println("foo should not be nil: ", foo) // foo should be Foo{}, but it is nil}func initialize(fooPointer interface{}) {    reflect.ValueOf(&fooPointer).Elem().Set(reflect.ValueOf(&Foo{}))    fmt.Println("fooPointer is not nil: ", fooPointer)}https://play.golang.org/p/Va0bqXJGhWZ
查看完整描述

1 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

若要修改被调用函数中的变量,必须将变量的地址传递给被调用函数。


使用以下代码:


func main() {

    var foo *Foo

    fmt.Println("foo is nil: ", foo)

    initialize(&foo)  // <-- Pass address of variable

    fmt.Println("foo should not be nil: ", foo) // foo should be Foo{}, but it is nil

}


func initialize(fooPP interface{}) {

    // No need for & here because fooPP is a **Foo.

    reflect.ValueOf(fooPP).Elem().Set(reflect.ValueOf(&Foo{}))

    fmt.Println("fooPointer is not nil: ", fooPointer)

}


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

添加回答

举报

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