Go 如何使用reflect获取自定义类型?
定义了以下数据类型:Go 如何使用reflect获取自定义类型?,go,reflection,types,Go,Reflection,Types,定义了以下数据类型: type Status int type RealStatus Status 有没有一种方法可以通过反射从RealStatus类型获取Status类型?是的,如果您想通过反射从RealStatus值获取状态值,那么这是可能的;您可以为此使用,例如: type Status int type RealStatus Status rs := RealStatus(1) st := reflect.TypeOf(Status(0)) var i interface{} i
type Status int
type RealStatus Status
有没有一种方法可以通过反射从
RealStatus
类型获取Status
类型?是的,如果您想通过反射从RealStatus
值获取状态
值,那么这是可能的;您可以为此使用,例如:
type Status int
type RealStatus Status
rs := RealStatus(1)
st := reflect.TypeOf(Status(0))
var i interface{}
i = reflect.ValueOf(rs).Convert(st).Interface()
fmt.Printf("%T %v", i, i)
这将输出(在上尝试):
请注意,您只能从反射中获取接口{}
值,因此要将其用作状态
值,您仍然需要一个。因此,您可以首先使用一个简单的类型,如本例所示:
rs := RealStatus(1)
var s Status
s = Status(rs)
fmt.Printf("%T %v", s, s)
它的输出相同(在上尝试),它的优点是
s
具有静态类型Status
否,不可能从另一个类型中获取一个类型。RealStatus
和Status
类型之间的唯一关系是它们共享相同的底层类型int
可以在@icza的答案中所示的这些类型的值之间进行转换。是的,这是可能的,但是您仍然只能从反射中获取一个
接口{}
值,要将其用作状态
,您需要一个类型断言。有鉴于此,您可以首先使用简单的类型转换。您想解决什么问题?不,不可能从另一种类型获得一种类型。运行时RealStatus
和Status
类型之间的唯一关系是它们共享相同的底层类型int
。可以在这些类型的值之间进行转换,如@icza的答案所示。@MuffinTop谢谢。你的答案对我帮助很大
rs := RealStatus(1)
var s Status
s = Status(rs)
fmt.Printf("%T %v", s, s)