Go语言学习 二十 接口

本文最初发表在我的个人博客,查看原文,获得更好的阅读体验


接口是一组方法的集合,接口类型的方法集是其接口。在Go中,接口的实现无需显示指明,只需要实现类型实现了一个接口的所有方法,就表示该类型实现了该接口,这种实现方式也称为隐式实现。隐式接口实现解耦了接口的定义,这样,可以在任何包中实现一个接口,同时,也使得接口的定义更加明确。

一 接口

1.1 接口声明

接口的声明需要使用interface关键字:
type 接口名称 interface

例如,我们可以定义一个USB接口:

type Usb interface {
   
	Read(s string)

	Write(s string)
}

接口的零值为nil

1.2 接口类型及实现

接口类型的变量可以保存任何实现了这些方法的值。接口中的每个方法都必须有一个唯一的非空名称。

package main

import "fmt"

func main() {
   
	// var device Usb

	c := Computer{
   "电脑"}
	m := MobilePhone{
   "手机"}

	content := "Golang is an interesting language."

	Insert(c, content)
	Insert(m, content)

	var player Player

	player = &m
	player.Play("Country Road")

}

type Usb interface {
   
	Read(s string)

	Write(s string)

	// _(s string) 编译错误:methods must have a unique non-blank name
}

// 接口实现类型1
type Computer struct {
   
	Name string
}

// 接口实现类型2
type MobilePhone struct {
   
	Name string
}

func (c Computer) Read(s string) {
   
	fmt.Printf("%v读取了%v个字符:%v。\n", c.Name, len(s), s)
}

func (c Computer) Write(s string) {
   
	fmt.Printf("%v写入了%v个字符:%v。\n", c.Name, len(s), s)
}

func (m MobilePhone) Read(s string) {
   
	fmt.Printf("%v读取了%v个字符:%v。\n", m.Name, len(s), s)
}

func (m MobilePhone) Write(s string) {
   
	fmt.Printf("%v写入了%v个字符:%v。\n", m.Name, len(s), s)
}

// 接口类型的参数
func Insert(device Usb, content string) {
   
	fmt.Printf("\n(设备类型:%T)\n", device)
	device.Read(content)
	device.Write(content)
}

type Player interface {
   
	Play(s string)
}

func (m MobilePhone) Play(s string) {
   
	fmt.Printf("%v开始播放歌曲:<<%v>>。\n", m.Name, s)
}

另外,类型可以实现多个接口:

type Player interface {
   
	Play(s string)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值