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)