gpt4 book ai didi

go - 在 Go 中设置引用

转载 作者:数据小太阳 更新时间:2023-10-29 03:45:43 26 4
gpt4 key购买 nike

如何通过引用传递接口(interface)并让方法为我填充它?像这样:

var i CustomInterface
Get("title" , ref i)
i.SomeOperationWithoutTypeAssertion() //i is nil here(my problem)

func Get(title string, iRef ref interface{}){
iRef = new(ATypeWhichImplementsTheUnderlyingInterface)
}

我希望 i 在调用 Get 方法后不为 nil。如何将 i 作为对 Get 方法的引用传递?

最佳答案

Go 没有像 C++ 这样的语言中的透明引用参数的概念,所以你问的是不可能的:你的 Get 函数接收接口(interface)变量的副本,所以赢了'正在更新调用范围内的变量。

如果您确实希望函数能够更新作为参数传递的内容,那么它必须作为指针传递(即调用 Get("title", &i))。没有语法可以指定参数应该是指向任意类型的指针,但所有指针都可以存储在 interface{} 中,以便该类型可以用于参数。然后您可以使用 type assertion/switchreflect package来确定你得到的是哪种类型。您需要依靠运行时错误或 panic 来捕获参数的错误类型。

例如:

func Get(title string, out interface{}) {
...
switch p := out.(type) {
case *int:
*p = 42
case *string:
*p = "Hello world"
...
default:
panic("Unexpected type")
}
}

关于go - 在 Go 中设置引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31228093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com