gpt4 book ai didi

go - 如何获取类型的字符串表示形式?

转载 作者:IT王子 更新时间:2023-10-29 02:03:36 28 4
gpt4 key购买 nike

假设我定义了以下类型:

type ID uuid.UUID

我如何以编程方式将类型作为字符串获取,以便以后很容易重构,而不是也许:

fmt.Sprintf("%T", ID{})

我不太喜欢它,因为它实例化了它,也是从一个接口(interface)。

最佳答案

您可以使用包 reflect (fmt 包也在后台执行此操作)。您可以从类型的指针开始,并使用一个类型化的nil 指针值而不分配,您可以从它的reflect.Type 导航。使用 Type.Elem() 将描述符转换为指针的 base 类型(或 element 类型)的描述符。

例子:

t := reflect.TypeOf((*ID)(nil)).Elem()
name := t.Name()
fmt.Println(name)

输出(在 Go Playground 上尝试):

ID

注意:请注意 Type.Name() 可能会返回一个空的 string(如果 Type 表示未命名的类型)。如果您使用的是 type declaration (使用 type 关键字),那么您已经命名了类型,因此 Type.Name() 将返回一个非空类型名称。但是将上面的代码用于 *[]string 类型的变量会给你一个空字符串:

var s *[]string
t := reflect.TypeOf(s).Elem()
name := t.Name()
fmt.Printf("%q", name)

输出(在 Go Playground 上尝试):

""

查看相关问题:

Golang reflect: Get Type representation from name?

Identify non builtin-types using reflect

关于go - 如何获取类型的字符串表示形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41905222/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com