本文介绍了在围棋中设置引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何通过引用传递接口并让方法为我填充它?大概是这样的:
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
方法后不为空。如何将i
作为引用传递给Get
方法?推荐答案
Go不像在C++这样的语言中那样具有透明引用参数的概念,因此您的请求是不可能的:您的Get
函数接收接口变量的副本,因此不会更新调用范围中的变量。
如果您确实希望函数能够更新作为参数传递的内容,则必须将其作为指针传递(即调用为Get("title", &i)
)。没有语法指定参数应该是指向任意类型的指针,但所有指针都可以存储在interface{}
中,以便该类型可以用于参数。然后,您可以使用type assertion/switch或reflect
package来确定指定的类型。您需要依靠运行时错误或死机来捕获参数的错误类型。
例如:
func Get(title string, out interface{}) {
...
switch p := out.(type) {
case *int:
*p = 42
case *string:
*p = "Hello world"
...
default:
panic("Unexpected type")
}
}
这篇关于在围棋中设置引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!