从本质上讲,Golang接口有四个问题,每个问题都比之前的问题稍微强一些。
import (
"A",
"B",
"C",
// more ...
"G"
)
我们定义了一个类型S:
type S struct {
// more ...
}
现在,如果S"实施"其中一个接口:
func (s S) Foo() {
// more ...
}
到目前为止,除了查看和搜索A - G的接口声明外,还有其他方法可以告诉A - G的哪个接口实现了吗?如果不是,有没有办法明确告诉S实现哪个接口?到目前为止,似乎推断出实现了哪个接口S.
对于相同的示例,如果B,C,D接口都具有相同签名的Foo()方法。在这种情况下,S实现哪个接口?它取决于从B,C和D导入这些接口的顺序吗?
如果我们在同一个文件中声明并定义接口B,C,D,而不是导入接口,但这些接口都具有相同签名的Foo()方法,S实现了哪个接口?它是否依赖于声明或定义这些接口的顺序?
如果,我们在同一个文件中声明并定义了B,C,D接口,B有Foo()方法,C有Bar()方法,D有Foo()和Bar()。现在如果S实现Foo()和Bar(),那么S是否实现了B和C,或者S只实现了D?
谢谢大家!
答案 0 :(得分:2)
没有。 (但作为旁注,您不导入接口,而是导入包。)
所有这些。订单无关紧要。如果您声明了B
,C
和D
类型的变量,则所有变量都可以保留S
。
所有这些。你在相同或不同的文件中所做的事并不重要。
所有这些。 S
实施B
因为S
有Foo()
。 S
实施C
因为S
有Bar()
。 S
实施D
,因为S
同时包含Foo()
和Bar()
。