go语言学习笔记 — 进阶 — 接口:接口声明

Posted Locutus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go语言学习笔记 — 进阶 — 接口:接口声明相关的知识,希望对你有一定的参考价值。

1. go语言的接口是什么

  • 具体特性

接口是双方约定的一种合作协议。接口实现者不需要关心接口被如何使用,调用者也不需要关心接口的实现细节。

  • 抽象特性

接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式、类型、结构。


2. 接口的声明形式

每个接口(类型)由数个方法组成。接口定义如下:

type 接口(类型)interface {
    方法名1(参数列表1(返回值列表1)
    方法名2(参数列表2(返回值列表2)
    ...
}

接口(类型)名:使用type关键字声明自定义类型——接口。接口命名一般约定在单词后添加er,如写操作接口为Writer,有字符串功能的接口为String,有关闭功能的接口叫Closer。

方法名:当接口(类型)首字母是大写,且方法名首字母也大写时,这个方法可以被接口所在包之外的代码访问。

参数列表、返回值列表:两者中的参数变量名可以被忽略。如

type writer interface {
    Write([]byte)  error
}

3. 开发中常见的接口写法

go内置包中有很多接口,如io包中的Writer接口:

type Writer interface {
    Write(p []byte) (n int, err error)
}

Writer接口可以调用Write()方法,写入一个字节切片([]byte),返回值表明写入字节数(n int)和可能发生的错误(err error)。还有fmt包的Stringer接口:

type Stringer interface {
    String() string
}

Stringer接口使用频率较高,把对象以字符串形式展现。在调用String()方法时,都可以获得对象对应的字符串。

go语言每个接口中的方法数量不会太多。go希望一个接口只精确描述一个特定功能,然后通过多个接口内嵌与组合的方式,把简单接口扩展为复杂接口。


4. duck type方式的接口实现

  • 接口定义
type Programmer interface {
    WriteHello() Code
}
  • 接口实现
type GoProgrammer struct {}

func (p *GoProgrammer) WriteHello() Code {
    return "fmt.Println(\\"Hello World!\\")" 
}

/*
\\"表示转义双引号
*/

以上是关于go语言学习笔记 — 进阶 — 接口:接口声明的主要内容,如果未能解决你的问题,请参考以下文章

go语言学习笔记 — 进阶 — 接口(2.3):接口无法实现的例子

go语言学习笔记 — 进阶 — 接口:在接口和类型之间转换

go语言学习笔记 — 进阶 — 接口:接口的嵌套组合 —— 把多个接口放到一个接口内

go语言学习笔记 — 进阶 — 接口:使用类型分支,批量判断空接口中变量的类型

go语言学习笔记 — 进阶 — 接口:空接口类型interface{} —— 能保存所有值

go语言学习笔记 — 进阶 — 接口(2.2):实现接口的条件 —— 接口中的方法都被实现