为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕桂英4014372 2022-07-04 16:54:14
定义了以下数据类型:type Status inttype RealStatus Status有没有办法通过反射从一个RealStatus类型到另一个类型?Status
查看完整描述

2 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

是的,如果您打算使用反射从一个值中获取一个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。


查看完整回答
反对 回复 2022-07-04
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

不,不可能从另一种类型中获得一种类型。RealStatus和类型之间的唯一关系Status是它们共享相同的底层类型int

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


查看完整回答
反对 回复 2022-07-04
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信