繁体   English   中英

如何使用反射获得自定义类型?

[英]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

不,不可能从另一种类型中获取一种类型。 RealStatusStatus类型之间的唯一关系是它们共享相同的基础类型int

如@icza 的回答所示,可以在这些类型的值之间进行转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM