Golang学习笔记(十二):接口的声明与使用

如同Java,PHP等面向对象的编程语言的接口一样,Go也内置有接口类型,为面向对象提供有力支持,但与其他编程语言还是有很多不一样的地方,下面来学习一下。

接口的定义

什么是接口?

Go提供了丰富的数据类型,如整型、浮点型等基础类型和struct,slice,array,map,channel,func等复合或引用类型,我们称这些类型为具体的类型,对于这些具体类型,我们可以知道类型里面的值是什么或这些类型可以做什么操作。

接口是则是一种抽象类型,接口只是一系列方法的集合,抽象实现某些功能需要的方法,但接口不提供具体的实现,而是操供一种规范,这种规范为具有相同行为,但却有不同实现的行为提供一套规则。

所以,我们不应该关心某个接口到底是什么,只是应该关心某接口能做什么。

接口的声明

怎么样声明一个接口?

在Go语言中使用关键字interface声明一个接口,格式如下:

type name interface {//name表示接口的名称
    
}
复制代码

下面示例是Go语言标准库io包的最常用的接口:io.Writer,这个接口提供了写入bytes的抽象方法。

package io

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

我们最常用使用的fmt包中有几个重要的格式化输出方法都以该接口为参数,以Fprint()为例:

func Fprint(w io.Writer, a ...interface{}) (n int, err error)
复制代码

这意味着Fprint()函数的第一个参数,可以是实现io.Writer的任意类型。

Fprint(os.Stdout,"输出一段字符串控制台")//输出到控制台
var buf	bytes.Buffer
Fprint(&buf,"输出一段字符串到缓存区")
fmt.Println(buf.string())//输出
复制代码

在上面的例子中,os.Stdout的类型是*os.Fileos.File实现了io.Writer中的write()方法,bytes.Buffer也是同样的。

如何实现一个接口

定义一个接口后,如何实现呢?

在Go语言中,实现一个接口,并不需要像其他语言一样,使用implement关键字实现该接口,Go语言支持隐式实现一个接口。

当我们在某个具体的类型中定义了接口的所有方法时,则该类型自动实现了该接口,下面我们自定义一个struct结构体,并实现io.Writer接口。

type MyWriter struct{
	str []byte
}

func (my *MyWriter)Write(p []byte) (n int, err error) {
	my.str = p
	return len(my.str), nil
}

func (my MyWriter)Str()string{
	return string(my.str)
}

func main() {
	m := &MyWriter{}
	fmt.Fprint(m,"test")
	fmt.Println(m.Str())
}

复制代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值