Mah*_*oni 3 reflection types go
假设我定义了以下类型:
type ID uuid.UUID
Run Code Online (Sandbox Code Playgroud)
我如何以编程方式获取字符串类型,以便以后可以轻松重构,而不是:
fmt.Sprintf("%T", ID{})
Run Code Online (Sandbox Code Playgroud)
我不太喜欢它,因为它也是从接口实例化它。
您可以使用包reflect(该fmt包也在幕后执行此操作)。您可以从指向类型的指针开始,并使用类型化的nil指针值而不进行分配,并且可以使用从其描述符导航到指针的基本类型(或元素reflect.Type类型)的描述符。Type.Elem()
例子:
t := reflect.TypeOf((*ID)(nil)).Elem()
name := t.Name()
fmt.Println(name)
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上尝试):
ID
Run Code Online (Sandbox Code Playgroud)
注意:请注意,Type.Name()可能会返回空string(如果Type表示未命名类型)。如果您使用类型声明(带有type关键字),那么您已经命名了该类型,因此Type.Name()将返回一个非空类型名称。*[]string但是,例如,将上面的代码用于类型变量将会给你一个空字符串:
var s *[]string
t := reflect.TypeOf(s).Elem()
name := t.Name()
fmt.Printf("%q", name)
Run Code Online (Sandbox Code Playgroud)
输出(在Go Playground上尝试):
""
Run Code Online (Sandbox Code Playgroud)
查看相关问题:
| 归档时间: |
|
| 查看次数: |
3249 次 |
| 最近记录: |