处理go的函数我发现在使用'generic'interface {}类型时,我不能强制编译器控制是否传递值或指向值的参数。
func f(o interface{}) {
...
}
最明显的解决方案是使用以下修改:
func f(o *interface{}) {
...
}
虽然这已成功编译,但我没有找到正确的步骤。那么,有没有办法说明我想传递任何 指针 ?
答案 0 :(得分:2)
您必须使用reflection。
import "reflect"
func f(o interface{}) {
if _, ok := reflect.Typeof(o).(*reflect.PtrType); !ok {
panic("Not a pointer")
}
// ...
}
您也可以考虑unsafe.Pointer
,但类型信息会丢失。
答案 1 :(得分:1)
没有。在编译时,interface{}
,空接口,是任何类型。
所有类型都实现空 界面:
interface{}
Interface types