首页 >后端开发 >Golang >如何根据原始类型获取Go类型的reflect.Interface种类?

如何根据原始类型获取Go类型的reflect.Interface种类?

Barbara Streisand
Barbara Streisand原创
2024-12-25 08:43:09564浏览

How to Get reflect.Interface Kind for a Go Type Based on a Primitive Type?

如何获取基于原始类型的类型的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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn