为了账号安全,请及时绑定邮箱和手机立即绑定

了解冲突的接口

了解冲突的接口

Go
慕尼黑5688855 2022-11-08 10:42:34
我正在尝试理解界面概念。以下是我的测试代码:package mainimport "fmt"//interfacetype InterfaceA interface {    A() string}//interfacetype InterfaceB interface {    A() string}//user defined type structuretype structure struct {    a string}//implementing A(), but which A() ?func (strt structure) A() string {    return strt.a}func main() {    fmt.Println("Start")    variable := structure{"hello"}    fmt.Println(variable.A())}根据文档,我知道没有像其他语言那样明确提及“实现”。但是当我调用variable.A()我的类型structure使用哪个接口时?InterfaceA还是InterfaceB?另外,我真的正确地实现了接口吗?
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

当您调用 时variable.A(),您没有使用任何接口。您正在调用类型的方法structure。


您可以使用接口调用相同的方法:


variable := structure{"hello"}

var ia InterfaceA

ia=variable

ia.A() // This calls variable.A

var ib InterfaceB

ib=variable

ib.A() // This also calls variable.A


查看完整回答
反对 回复 2022-11-08
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

您的接口不会相互冲突;接口不冲突。当它们描述相同的事物时,它们可以彼此冗余,但这不会造成冲突或任何其他有形的问题。

至于structure使用的是哪个接口:都没有。诸如结构之类的具体类型不使用接口,而是实现它们。接口的实现是隐式和自动的。这只是一个事实陈述,而不是一种机制(除非你明确地使用它)。此外,这两个接口都不会在您的程序中使用。你variable是一个structure并且被用作一个structure。它可以在不同的时间用作其中一个 InterfaceAInterfaceB两个,但在这个例子中你没有做这样的事情。

请参阅 Burak 的回答,了解如何通过接口使用该structure值。


查看完整回答
反对 回复 2022-11-08
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号