如何调用作为接口传递的对象的嵌入式结构方法?

我的场景需要用户嵌入一个基本结构并实现一个接口。

然后,应该将该结构的一个实例传递给一个函数。该函数需要调用基本结构的方法。这失败了


// Given base struct and interface


type Interface interface {

    Do()

}


type BaseStruct struct {

    i int

    s string

}


func (*b BaseStruct) Stuff() {}


// The user needs to create a struct that embeds BaseStruct and to implement Interface:

type CustomStruct struct {

    *BaseStruct

}


func (*c CustomStruct) Do() {}


// The user now instantiates the struct and needs to call a function


inst := CustomStruct{}

SomePackageFun(&inst)


// The below function receives the custom struct, and must call the base struct's method, but this fails


func SomePackageFunc(i Interface) {

    // declaring the function with Interface works but I can't call the methods of BaseStruct

    i.Stuff() // not recognized by the compiler


白猪掌柜的
浏览 90回答 1
1回答

沧海一幻觉

如果您希望能够在接口类型的变量上调用方法,则应将该方法添加到接口中。出于满足接口的目的,来自嵌入式结构的方法计数。要调用不属于接口的任何内容,您必须对具体类型(或具有该方法的不同接口类型)进行断言,这违背了这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go