栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

接口实现中的非接口方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

接口实现中的非接口方法

该错误描述了这一切:

dog.WagTail未定义(动物类型没有字段或方法WagTail)

要实现一个接口,您应该实现在其内部定义的所有方法。

dog := NewDog("Brown")dog.MakeNoise()dog.WagTail()

现在

NewDog
返回包含
MakeNoise
方法但不包含的动物接口
WagTail

管理需求的唯一方法是创建结构类型的变量,

Dog
然后可以调用将Dog作为接收者的任何方法。

d := &Dog{"Brown"}d.WagTail()

或者,您可以

Dog
NewDog
方法中返回指向struct 的指针,就像在注释中提到的代码中那样:

func NewDog(color string) *Dog {    return &Dog{color}}

但是,如果未在接口中定义该方法,则无法使用struct作为方法接收者来实现它。

Golang提供了一种方法:

您可以要求编译器通过尝试使用T的零值或指向T的指针进行赋值(如果适用)来检查类型T是否实现了接口I。

type T struct{}var _ I = T{}       // Verify that T implements I.var _ I = (*T)(nil) // Verify that *T implements I.

如果T(或* T,相应地)没有实现I,则在编译时会捕获该错误。

如果希望接口的用户显式声明他们实现了该接口,则可以在接口的方法集中添加一个具有描述性名称的方法。例如:

type Fooer interface {    Foo()    ImplementsFooer()}

然后,类型必须将ImplementsFooer方法实现为Fooer,清楚地记录事实并在godoc的输出中宣布该事实。

type Bar struct{}func (b Bar) ImplementsFooer() {}func (b Bar) Foo() {}

大多数代码不使用此类约束,因为它们限制了接口概念的实用性。但是有时候,它们对于解决相似接口之间的歧义是必要的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/413179.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号