如何在Go中找到接口的根实现?

时间:2014-04-30 00:20:54

标签: go

我在结构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的一般情况。

1 个答案:

答案 0 :(得分:3)

OneConcrete没有嵌入界面。它实现了该接口。嵌入一​​个类型意味着struct将获得一个与给定类型具有相同名称的附加字段,并且该类型的所有方法都将成为struct的方法。因此,要获得OneConcrete,您应该two.(TwoConcrete).RootInterface.(OneConcrete)