Golang:这种类型的接口是什么?

时间:2015-07-09 01:13:48

标签: import go interface declare

从本质上讲,Golang接口有四个问题,每个问题都比之前的问题稍微强一些。

  1. 说我们导入了很多接口,A,B,C,...,G
import (
    "A",
    "B",
    "C",
    // more ...
    "G"
)

我们定义了一个类型S:

type S struct {
    // more ...
}

现在,如果S"实施"其中一个接口:

func (s S) Foo() {
    // more ...
}

到目前为止,除了查看和搜索A - G的接口声明外,还有其他方法可以告诉A - G的哪个接口实现了吗?如果不是,有没有办法明确告诉S实现哪个接口?到目前为止,似乎推断出实现了哪个接口S.

  1. 对于相同的示例,如果B,C,D接口都具有相同签名的Foo()方法。在这种情况下,S实现哪个接口?它取决于从B,C和D导入这些接口的顺序吗?

  2. 如果我们在同一个文件中声明并定义接口B,C,D,而不是导入接口,但这些接口都具有相同签名的Foo()方法,S实现了哪个接口?它是否依赖于声明或定义这些接口的顺序?

  3. 如果,我们在同一个文件中声明并定义了B,C,D接口,B有Foo()方法,C有Bar()方法,D有Foo()和Bar()。现在如果S实现Foo()和Bar(),那么S是否实现了B和C,或者S只实现了D?

  4. 谢谢大家!

1 个答案:

答案 0 :(得分:2)

  1. 没有。 (但作为旁注,您不导入接口,而是导入包。)

  2. 所有这些。订单无关紧要。如果您声明了BCD类型的变量,则所有变量都可以保留S

  3. 所有这些。你在相同或不同的文件中所做的事并不重要。

  4. 所有这些。 S实施B因为SFoo()S实施C因为SBar()S实施D,因为S同时包含Foo()Bar()