首页 > 后端开发 > Golang > 如何在 Go 中检索基元下的接口类型的'reflect.Kind”?

如何在 Go 中检索基元下的接口类型的'reflect.Kind”?

Barbara Streisand
发布: 2024-12-24 06:45:31
原创
890 人浏览过

How Can I Retrieve the `reflect.Kind` of an Interface Type Underlying a Primitive in Go?

检索基于基元的类型的 Reflect.Kind:详细说明

开发人员通常会遇到需要确定 Reflect.Kind 的情况具有基于原始类型的底层实现的类型,例如如:

type ID interface {
    myid()
}

type id string

func (id) myid() {}
登录后复制

在上面的示例中,“id”类型使用底层字符串基元实现“ID”接口。挑战在于检索reflect.Interface值而不是默认的reflect.String类型。

揭示解决方案:指向接口的指针

一个常见的误解是传递反射类型为“id”的值。TypeOf()。然而,这会导致将值隐式重新打包到带有嵌入字符串原语的 interface{} 中。

克服这一障碍的关键是利用指向接口的指针。通过传递指针,类型描述符包装了一个interface{},从而防止重新包装。随后,我们可以使用 Type.Elem() 检索指向接口的类型描述符,这将准确反映类型的接口性质。

id := ID(id("test"))

t := reflect.TypeOf(&id).Elem()

fmt.Println(t.Kind()) // Output: interface
登录后复制

这种方法有效地揭示了类型所需的 Reflect.Interface 类型植根于原语。

其他见解:指向接口的指针好处

这种技术不仅解决了最初的问题,还突出了使用接口指针的好处。在某些情况下,例如将值传递给需要特定类型(例如字符串或时间)的函数,指向接口的指针可以有利于避免隐式转换。

通过遵循这些准则,开发人员可以准确地检索源自原语的 Reflect.Kind 类型,更深入地了解 Go 的反射能力。

以上是如何在 Go 中检索基元下的接口类型的'reflect.Kind”?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板