跳到内容
观澜涉川 · 札记EN

Go语言中的反射应用:获取结构体的类型名

· 约 1 分钟阅读

本文介绍一种获取结构体的类型名的方法。

使用reflect库可获取结构体的类型名:

func GetName(instance interface{}) string {
instanceType := reflect.TypeOf(instance)
return instanceType.Name()
}

如果想定制化某些实例的名字,那么可以结合接口一起实现。比如,每个结构体对应一张数据库表,数据库表的名字就是结构体的名字,即可使用上面的GetName实现;但某些结构体对应的名字比较特殊,需要特殊设置,那么可以Get的实现如下所示:

type Tabler interface {
TableName() string
}
func GetName(instance interface{}) string {
instanceType := reflect.TypeOf(instance)
if v, ok := instance.(Tabler); ok {
return v.TableName()
}
return instanceType.Name()
}

对于那些需要特殊设置的结构体,实现Tabler接口即可。