首页 > 解决方案 > 如何使用反射获得自定义类型?

问题描述

定义了以下数据类型:

type Status int
type RealStatus Status

有没有办法通过反射从一个RealStatus类型到另一个类型?Status

标签: goreflectiontypes

解决方案


是的,如果您打算使用反射从一个值中获取一个Status 值,这是可能的;您可以为此使用,例如:RealStatus Value.Convert()

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)

这将输出(在Go Playground上尝试):

main.Status 1

请注意,您只能interface{}从反射中获取值,因此要将其用作Status值,您仍然需要类型断言。鉴于此,您可以首先使用简单的类型转换,如本例所示:

rs := RealStatus(1)

var s Status
s = Status(rs)

fmt.Printf("%T %v", s, s)

输出相同(在Go Playground上尝试),它s具有静态类型的优势Status


推荐阅读