源码家族
当前位置:首页 > 资讯中心

资讯中心

【 Go语言接口声明方式 】

发布时间:2021-09-18 09:13:33 阅读次数:182

Go语言不是“传统”的面向对象编程语言:它没有类和继承的概念。


然而,Go语言有一个非常灵活的接口概念,通过它可以实现许多面向对象的特性。许多面向对象语言都有类似的接口概念,但是Go语言中的接口类型是独特的,因为它满足隐式实现。也就是说,我们没有必要为给定的特定类型定义所有满足的接口类型;仅仅有一些必要的方法就足够了。


这种设计可以让你创建一个新的接口类型满足已经存在的具体类型却不会去改变这些类型的定义;当我们使用的类型来自于不受我们控制的包时这种设计尤其有用。

接口类型是对其它类型行为的抽象和概括;因为接口类型不会和特定的实现细节绑定在一起,通过这种抽象的方式我们可以让我们的函数更加灵活和更具有适应能力。

接口是双方约定的一种合作协议。接口实现者不需要关心接口会被怎样使用,调用者也不需要关心接口的实现细节。接口是一种类型,也是一种抽象结构,不会暴露所含数据的格式、类型及结构。

接口声明的格式

每个接口类型由数个方法组成。接口的形式代码如下:

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

对各个部分的说明:

  • 接口类型名:使用 type 将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加 er,如有写操作的接口叫 Writer,有字符串功能的接口叫 Stringer,有关闭功能的接口叫 Closer 等。

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

  • 参数列表、返回值列表:参数列表和返回值列表中的参数变量名可以被忽略,例如:

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

开发中常见的接口及写法

Go语言提供的很多包中都有接口,例如 io 包中提供的 Writer 接口:

纯文本复制
type Writer interface {
Write(p []byte) (n int, err error)
}

这个接口可以调用 Write() 方法写入一个字节数组([]byte),返回值告知写入字节数(n int)和可能发生的错误(err error)。

类似的,还有将一个对象以字符串形式展现的接口,只要实现了这个接口的类型,在调用 String() 方法时,都可以获得对象对应的字符串。在 fmt 包中定义如下:

纯文本复制
type Stringer interface {
String() string
}

Stringer 接口在Go语言中的使用频率非常高,功能类似于 Java 或者 C# 语言里的 ToString 的操作。

Go语言的每个界面都没有太多的方法。Go语言希望通过一个接口准确描述自己的功能,通过嵌入和组合多个接口,将简单的接口扩展成复杂的接口。


上一篇:Vue.js中的 条件判断怎么处理
下一篇:大家都常用的技术网站有哪些