首页 > 解决方案 > 确定结构是否嵌入了另一个结构?

问题描述

我试图弄清楚如何确定给定interface{}的结构是嵌入给定结构作为匿名字段的结构,还是给定结构本身的实例。

例如,如果我有一个 struct A,并且 structB嵌入了 struct A,但 structC没有:

我创建了一个游乐场,希望能说明我正在努力实现的目标。

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) 
   }
}

编辑:我认为我可以通过反射来做到这一点,但我更好奇我是否可以在没有反射的情况下做到这一点。

标签: gostructcomposition

解决方案


推荐阅读