Go语言自学系列 | golang接口和类型的关系

本文介绍了如何在Go语言中实现一个类型同时满足多个接口,如Player和Video,通过Mobile结构体实例化并演示了多态的运用。学习者将理解如何定义接口和结构体,以及如何在实际项目中操作和测试这些概念。

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客


  1. 一个类型可以实现多个接口
  2. 多个类型可以实现同一个接口(多态)

一个类型实现多个接口

一个类型实现多个接口,例如:有一个Player接口可以播放音乐,有一个Video接口可以播放视频,一个手机Mobile实现这两个接口,既可以播放音乐,又可以播放视频。

定义一个Player接口

type Player interface {
    playMusic()
}

定义一个Video接口

type Video interface {
    playVideo()
}

定义Mobile接口体

type Mobile struct {
}

实现两个接口

func (m Mobile) playMusic() {
    fmt.Println("播放音乐")
}

func (m Mobile) playVideo() {
    fmt.Println("播放视频")
}

测试

package main

import "fmt"

type Player interface {
    playMusic()
}

type Video interface {
    playVideo()
}

type Mobile struct {
}

func (m Mobile) playMusic() {
    fmt.Println("播放音乐")
}

func (m Mobile) playVideo() {
    fmt.Println("播放视频")
}

func main() {
    m := Mobile{}
    m.playMusic()
    m.playVideo()
}

运行结果

[Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
播放音乐
播放视频

多个类型实现同一个接口

比如,一个宠物接口Pet,猫类型Cat和狗类型Dog都可以实现该接口,都可以把猫和狗当宠物类型对待,这在其他语言中叫多态。

定义一个Pet接口

type Pet interface {
    eat()
}

定义一个Dog结构体

type Dog struct {
}

定义一个Cat结构体

type Cat struct {
}

实现接口

func (cat Cat) eat() {
    fmt.Println("cat eat...")
}

func (dog Dog) eat() {
    fmt.Println("dog eat...")
}

测试

package main

import "fmt"

type Pet interface {
    eat()
}

type Dog struct {
}

type Cat struct {
}

func (cat Cat) eat() {
    fmt.Println("cat eat...")
}

func (dog Dog) eat() {
    fmt.Println("dog eat...")
}

func main() {
    var p Pet
    p = Cat{}
    p.eat()
    p = Dog{}
    p.eat()
}

运行结果

[Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
cat eat...
dog eat...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值