题目来源:跟谁学
频次:1
答案:peace
go中的interface是一个类型,而且这个类型中包含的是函数,或者interface(这样就形成了嵌套),简单的说就是函数(或方法)的集合。 interface实际上就是一个结构体,包含两个成员。其中一个成员是指向具体数据的指针,另一个成员中包含了类型信息。空接口和带方法的接口略有不同,下面分别是空接口和带方法的接口使用的数据结构:
struct Eface
{
Type* type;
void* data;
};
struct Iface
{
Itab* tab;
void* data;
};
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 注意 (1) 接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的变量(实例) (2) 接口中所有的方法都没有方法体,即都是没有实现的方法。 (3) 在Go中,一个自定义类型需要将某个接口的所有方法都实现,我们说这个自定义类型实现了该接口。 (4) 一个自定义类型只有实现了某个接口,才能将该自定义类型的实例(变量)赋给接口类型。 (5) 只要是自定义数据类型就可以实现接口,不仅仅是结构体类型。 (6) 一个自定义类型可以实现多个接口。 (7) Go接口不能有任何变量。 (8) 一个接口可以继承多个别的接口,这时如果要实现这个接口必须实现它继承的所有接口的方法。在低版本的Go编辑器中,一个接口继承其他多个接口时,不允许继承的接口有相同的方法名。比如A接口继承B、C接口,B、C接口的方法名不能一样。高版本的Go编辑器没有相关问题。 (9) interface类型默认是一个指针(引用类型),如果没有对interface初始化就使用,那么会输出nil。 (10) 空接口interface{}没有任何方法,所以所有类型都实现了空接口,即我们可以把任何一个变量赋给空接口类型。