如何获取基于原始类型的类型的reflect.Interface种类
在Go中,当使用实现接口的类型时但在其实现中依赖原始类型,因此有必要获取reflect.Kind作为reflect.Interface。本文解决了这个需求并提供了解决方案。
问题
考虑以下情况:
type ID interface { myid() } type id string func (id) myid() {}
这里,ID 是一个接口通过id实现,id是一个字符串。当我们使用reflect.TypeOf(id)获取类型描述符时,结果不是想要的reflect.Interface而是reflect.String。
解决方案
要解决此问题,需要将指向接口值的指针而不是值本身传递给reflect.TypeOf()。这可以防止接口{}中值的隐式包装。
id := ID(id("test")) t := reflect.TypeOf(&id).Elem() fmt.Println(t.Kind()) // Output: "interface"
在此示例中,reflect.TypeOf(&id) 返回一个指向接口值的指针,然后使用 Elem() 将其解开以获取接口本身的类型描述符。这种方法提供了所需的reflect.Interface种类。
附加说明
相同的技术可用于获取任何类型的reflect.Type,当它返回reflect.Interface时调用 Kind()。只需将指向值或类型的指针传递给reflect.TypeOf()。
以上是如何根据原始类型获取Go类型的reflect.Interface种类?的详细内容。更多信息请关注PHP中文网其他相关文章!