英文:
Understanding conflicting Interfaces
问题
我正在尝试理解接口的概念。
以下是我的测试代码:
package main
import "fmt"
// 接口A
type InterfaceA interface {
A() string
}
// 接口B
type InterfaceB interface {
A() string
}
// 用户定义的结构体
type structure struct {
a string
}
// 实现A()方法,但是是实现哪个A()方法呢?
func (strt structure) A() string {
return strt.a
}
func main() {
fmt.Println("开始")
variable := structure{"hello"}
fmt.Println(variable.A())
}
根据文档,我理解在Go语言中没有像其他语言那样明确提到"实现"(Implements)的概念。但是当我调用variable.A()
时,我的类型structure
使用的是哪个接口?是InterfaceA
还是InterfaceB
?此外,我是否正确地实现了接口?
英文:
I am trying to understand the interface concept.
The following is my test code:
package main
import "fmt"
//interface
type InterfaceA interface {
A() string
}
//interface
type InterfaceB interface {
A() string
}
//user defined type structure
type 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())
}
As per the documentation, I understand that there is no explicit mention of "Implements" like in other languages. But when I call variable.A()
which interface is my type structure
using? InterfaceA
or InterfaceB
? Plus, am I actually implementing the interface properly?
答案1
得分: 3
当你调用variable.A()
时,你没有使用任何接口。你是在调用类型structure
的方法。
你可以使用接口来调用相同的方法:
variable := structure{"hello"}
var ia InterfaceA
ia = variable
ia.A() // 这将调用 variable.A
var ib InterfaceB
ib = variable
ib.A() // 这也将调用 variable.A
英文:
When you call variable.A()
, you are not using any interfaces. You are calling a method of the type structure
.
You can call the same method using an interface:
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
</details>
# 答案2
**得分**: 1
你的接口之间没有冲突;接口之间不会发生冲突。它们可以彼此冗余,因为它们描述的是同一件事情,但这并不会产生冲突或其他实质性的问题。
至于`structure`使用哪个接口:都不使用。结构体等具体类型不使用接口,它们实现接口。实现接口是隐式和自动的。这只是一个事实陈述,而不是一个机制(除非你明确将其用作机制)。此外,在你的程序中,两个接口都没有被广泛使用。你的`variable`是一个`structure`,并且被用作一个`structure`。它*可以*在不同的时间被用作`InterfaceA`或`InterfaceB`,或者同时用作两者,但在这个例子中你没有这样做。
请参考Burak的答案,了解如何通过接口使用`structure`值。
<details>
<summary>英文:</summary>
Your interfaces do not conflict with each other; interfaces do not conflict. They can be redundant with each other as they describe the same thing, but that doesn't create a conflict nor any other tangible problem.
As for which interface is `structure` using: neither. Concrete types such as structs don't use interfaces, they implement them. Implementing of an interface is implicit and automatic. It's just a statement of fact, not a mechanism (until you explicitly use it as such). Further, neither interface is used to any extent in your program. Your `variable` is a `structure` and is being used as a `structure`. It *could* be used as *either* `InterfaceA` or `InterfaceB`, or both of them at different times, but you are doing no such thing in this example.
See Burak's answer for how you *could* use the `structure` value through the interfaces.
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论