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

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

Barbara Streisand
Barbara Streisand原创
2024-12-24 06:45:31945浏览

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中文网其他相关文章!

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