我在结构RootInterface
中嵌入了一个接口OneConcrete
。然后,接口的这个具体实现再次嵌入另一个结构TwoConcrete
{/ 1}}。
如何确定RootInterface
的实际实施是RootInterface
?以下代码有望展示我想要实现的目标:
http://play.golang.org/p/YrwDRwQzDc
OneConcrete
请注意,我想回答package main
import "fmt"
type RootInterface interface {
GetInt() int
}
type OneConcrete struct {
}
func (oc OneConcrete) GetInt() int {
return 1
}
type TwoConcrete struct {
RootInterface
}
func main() {
one := OneConcrete{}
fmt.Println("One", one.GetInt())
two := RootInterface(TwoConcrete{RootInterface: one})
_, ok := two.(TwoConcrete)
fmt.Println(ok) // prints true
// How can I get the equivalent of ok == true,
// i.e. find out that OneConcrete is the acutal
// RootInterface implementation?
_, ok = two.(OneConcrete)
fmt.Println(ok) // prints false
}
可以在结构层次结构中任意嵌入RootInterface
的一般情况。
答案 0 :(得分:3)
OneConcrete
没有嵌入界面。它实现了该接口。嵌入一个类型意味着struct将获得一个与给定类型具有相同名称的附加字段,并且该类型的所有方法都将成为struct的方法。因此,要获得OneConcrete
,您应该two.(TwoConcrete).RootInterface.(OneConcrete)
。