如何强制编译器控制值/指针到值函数参数?

处理go的功能时,我发现当使用'generic'interface {}类型时,不能强迫编译器控制是传递值还是指向值的指针参数。


func f(o interface{}) {

...

}

最明显的解决方案是使用以下修改:


func f(o *interface{}) {

...

}

尽管此步骤已成功编译,但我没有找到正确的步骤。因此,是否有任何方法可以声明我要传递任何指针?


侃侃无极
浏览 252回答 2
2回答

红颜莎娜

否。在编译时,interface{}空接口是任何类型。所有类型都实现空接口:interface{} 接口类型

qq_笑_17

您必须使用反射。import "reflect"func f(o interface{}) {  if _, ok := reflect.Typeof(o).(*reflect.PtrType); !ok {    panic("Not a pointer")  }  // ...}您也可以考虑unsafe.Pointer,但是类型信息将丢失。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go