Go语言接口 | 青训营笔记

93 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 16 天

一、本堂课重点内容

本堂课的知识要点有哪些?

  • Go语言接口

二、详细知识点介绍

本堂课介绍了哪些知识点?

Go语言接口

  1. Go语言接口虽然也是抽象方法的集合,但没有要求类型强制实现接口,类型实现接口也不需要事先声明。Go语言的接口尽管不能实例化,但是可以声明变量,可以被赋值,赋值后就等同实例化了。

  2. 在Go语言中接口也是一种数据类型,而且是命名数据类型。因此,使用接口之前是需要先声明的。

  3. Go语言的接口是抽象方法的集合,其类型定义的实体就是各种方法列表,不应该包含其它内容。

  4. Go语言接口声明的语法格式如下所示:

    type Inter interface{
        Method1(para_list)(return_list)
        ...
        MethodN(para_list)(return_list)
    }
    
  5. 接口类型名称为任何合法的Go语言标识符。Go语言的接口命名习惯是在名字后面加er,尤其是在方法名字后加er。考虑可见性问题,建议首字母大写。方法名称也一样,建议采用首字母大写,便于导出。Go语言习惯上一个接口仅放置一个方法,这样极容易被其它数据类型实现。

  6. 接口中的方法为抽象方法,仅有方法名称和方法签名,不含接受者。当方法被实现以后,就有接受者了。

  7. 抽象方法也可以不带参数,如下所示:

    type Gater interface{
    	Gat()
    }
    
  8. 接口为一种数据类型,可以用于声明接口型变量。可以给接口变量赋值,也可以用接口型变量作为函数的参数。尤其在类型断言表达式中只能使用接口类型的变量。

  9. Go语言的接口类型与结构体类型一样,可以实现嵌套与组合。假如接口A嵌入到接口B中,而接口B又嵌入到接口C中,这样一层套一层,称为接口的嵌套。

  10. 将已经声明的接口用其名称直接插入到另一个接口的内部,形成嵌套,就可以生成一个新接口。

  11. 根据已有的接口来生成新的接口,这是一个常用的方法。接口的嵌入可以认为是接口的继承,多个接口组合一起嵌入,可以实现多继承。

  12. 内嵌接口可以直接展开在外层接口也不影响接口的实现。

  13. 一个没有被实现的接口是没有什么意义的,接口被实现了才能体现它的用处。

  14. Go语言并没有强制要求类型明确声明继承或实现某接口,实现完全是隐式进行的。而且实现接口和声明接口没有任何时间上的顺序要求,完全可以先实现后声明。

  15. Go语言规定,任何数据类型方法集合的子集包含了某接口的方法集合,就认为该数据类型实现了某接口。实现了接口的任何数据类型都可以给接口赋值。

  16. 在接口中定义的是抽象方法,并没有接受者,在具体的类型实现中,需要明确接受者类型:值类型或指针类型。

  17. 实现接口方法只能选择值类型或指针类型其中之一作为接受者类型,不可以两者都实现。

  18. 以指针类型接受者实现的方法,赋给接口变量的值也必须是地址,给它赋实例的值是不行的。

三、引用参考

我参考了哪些外部博客/笔记/文章?