go - 确定结构是否嵌入了另一个结构?
问题描述
我试图弄清楚如何确定给定interface{}
的结构是嵌入给定结构作为匿名字段的结构,还是给定结构本身的实例。
例如,如果我有一个 struct A
,并且 structB
嵌入了 struct A
,但 structC
没有:
- 结构
A
应该是有效的 - 结构
B
应该是有效的 - 结构
C
不应该是有效的
我创建了一个游乐场,希望能说明我正在努力实现的目标。
https://play.golang.org/p/pCClhTyJehH
我已经尝试了以下方法,但该a,embedsA := v.(struct{A})
部分似乎没有做我想做的事情。
a,embedsA := v.(struct{A})
if embedsA {
fmt.Printf("embedded: %v\n", a.A.Foo)
} else {
a,isA := v.(A)
if isA {
fmt.Printf("instance: %v\n", a.Foo)
} else {
fmt.Printf("%v does not embed A\n",v)
}
}
编辑:我认为我可以通过反射来做到这一点,但我更好奇我是否可以在没有反射的情况下做到这一点。
解决方案
推荐阅读
- java - 是否有删除所有未使用变量的 Eclipse 快捷方式?
- android - 如何修复这个 SQLite 异常?
- html - 我想在屏幕中间调整内容框的大小
- c# - 如何在循环中处理异步 tcpClient 连接
- android - 找到多个文件,其独立于操作系统的路径为“lib/armeabi-v7a/libRSSupport.so”
- javascript - 有什么方法可以使用 jQuery 过滤多个条件?
- java - jUnit mock 测试和代码覆盖 IOException
- vue.js - Vue ctrl+s 事件监听器未触发
- drupal - 如何使用 DDEV 配置搜索 API
- node.js - Node.js - 用于生产的 Google Cloud 应用程序