检索基于基元的类型的 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中文网其他相关文章!