猿问

为什么在结构中使用匿名字段会使类型在没有写入方法时满足接口?

要使类型满足接口,该类型需要实现接口中定义的方法。


但是,在下面的代码片段中,没有编写任何方法,但通过使用作为匿名字段,它满足 。myStructsomeInterfacesomeInterface


有人可以帮忙解释为什么吗?谢谢。


package main


import "fmt"


type someInterface interface {

    method1(int) string

    method2(string) string

}


type myStruct struct {

    someInterface

    body int

}


func main() {

    var foo someInterface

    bar := myStruct{}


    foo = bar // why no compile error??


    fmt.Println(foo)

}


Cats萌萌
浏览 55回答 1
1回答

holdtom

myStruct嵌入 ,因此它具有在该接口中定义的所有方法。这也意味着,有一个名为 的字段,该字段未初始化,因此调用将崩溃。在使用它之前,您必须对其进行初始化。someInterfacemyStructsomeInterfacebar.method1bar:=myStruct{}bar.someInterface=someInterfaceImpl{}bar.method1(0)bar.method2("")
随时随地看视频慕课网APP

相关分类

Go
我要回答