如何强制编译器控制值/指向值的func参数?

时间:2010-09-27 22:43:48

标签: go

处理go的函数我发现在使用'generic'interface {}类型时,我不能强制编译器控制是否传递值或指向值的参数。

func f(o interface{}) {
...
}

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

func f(o *interface{}) {
...
}

虽然这已成功编译,但我没有找到正确的步骤。那么,有没有办法说明我想传递任何 指针

2 个答案:

答案 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