本文介绍了在围棋中设置引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何通过引用传递接口并让方法为我填充它?大概是这样的:

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/switchreflect package来确定指定的类型。您需要依靠运行时错误或死机来捕获参数的错误类型。

例如:

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

这篇关于在围棋中设置引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 11:28