我正在尝试理解界面概念。以下是我的测试代码: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

蛊毒传说
TA贡献1895条经验 获得超3个赞
您的接口不会相互冲突;接口不冲突。当它们描述相同的事物时,它们可以彼此冗余,但这不会造成冲突或任何其他有形的问题。
至于structure
使用的是哪个接口:都没有。诸如结构之类的具体类型不使用接口,而是实现它们。接口的实现是隐式和自动的。这只是一个事实陈述,而不是一种机制(除非你明确地使用它)。此外,这两个接口都不会在您的程序中使用。你variable
是一个structure
并且被用作一个structure
。它可以在不同的时间用作其中一个 InterfaceA
或InterfaceB
两个,但在这个例子中你没有做这样的事情。
请参阅 Burak 的回答,了解如何通过接口使用该structure
值。
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消