[英]How can I get custom type with reflect?
定义了以下数据类型:
type Status int
type RealStatus Status
有没有办法通过反射从RealStatus
类型到Status
类型?
是的,如果您想使用反射从RealStatus
值中获取Status
值,这是可能的; 您可以Value.Convert()
使用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
。
不,不可能从另一种类型中获取一种类型。 RealStatus
和Status
类型之间的唯一关系是它们共享相同的基础类型int
。
如@icza 的回答所示,可以在这些类型的值之间进行转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.