go - 如何使用反射获得自定义类型?
问题描述
定义了以下数据类型:
type Status int
type RealStatus Status
有没有办法通过反射从一个RealStatus
类型到另一个类型?Status
解决方案
是的,如果您打算使用反射从一个值中获取一个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
。
推荐阅读
- ios - 查找字符串前后的单词
- https - 集中式 SSL 证书不适用于通配符
- ios - 如何从结构中访问特定值
- linux-kernel - 在 Linux netfilter 挂钩中验证 UDP 校验和
- bloomberg - 使用 Excel 的 Bloomberg API 查找股票的 IPO 日期?
- c# - 使用 Jwt 在 Web API 2 C# 中滑动过期如何工作
- android-studio - 运行 Gradle 时出现颤振错误:退出代码 1(Ubuntu 18.04 LTS)
- elasticsearch - 在 Elasticsearch 中解析日志时 FileBeat 有什么用
- java - 错误:- 扫描器类要求输入无限次
- python - Python - 通过应用过滤器从列表中创建新列表