(18条消息) Go语言自学系列 | golang接口和类型的关系_COCOgsta的博客-CSDN博客



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

COCOgsta 于 2022-04-23 21:47:21 发布 14 收藏
分类专栏: 视频学习笔记 文章标签: golang

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

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

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


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

一个类型实现多个接口

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

定义一个Player接口

  1. 1
    type Player interface {
  2. 2
    playMusic()
  3. 3
    }

定义一个Video接口

  1. 1
    type Video interface {
  2. 2
    playVideo()
  3. 3
    }

定义Mobile接口体

  1. 1
    type Mobile struct {
  2. 2
    }

实现两个接口

  1. 1
    func (m Mobile) playMusic() {
  2. 2
    fmt.Println("播放音乐")
  3. 3
    }
  4. 4
  5. 5
    func (m Mobile) playVideo() {
  6. 6
    fmt.Println("播放视频")
  7. 7
    }
  8. 8

测试

  1. 1
    package main
  2. 2
  3. 3
    import "fmt"
  4. 4
  5. 5
    type Player interface {
  6. 6
    playMusic()
  7. 7
    }
  8. 8
  9. 9
    type Video interface {
  10. 10
    playVideo()
  11. 11
    }
  12. 12
  13. 13
    type Mobile struct {
  14. 14
    }
  15. 15
  16. 16
    func (m Mobile) playMusic() {
  17. 17
    fmt.Println("播放音乐")
  18. 18
    }
  19. 19
  20. 20
    func (m Mobile) playVideo() {
  21. 21
    fmt.Println("播放视频")
  22. 22
    }
  23. 23
  24. 24
    func main() {
  25. 25
    m := Mobile{}
  26. 26
    m.playMusic()
  27. 27
    m.playVideo()
  28. 28
    }

运行结果

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

多个类型实现同一个接口

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

定义一个Pet接口

  1. 1
    type Pet interface {
  2. 2
    eat()
  3. 3
    }

定义一个Dog结构体

  1. 1
    type Dog struct {
  2. 2
    }

定义一个Cat结构体

  1. 1
    type Cat struct {
  2. 2
    }

实现接口

  1. 1
    func (cat Cat) eat() {
  2. 2
    fmt.Println("cat eat...")
  3. 3
    }
  4. 4
  5. 5
    func (dog Dog) eat() {
  6. 6
    fmt.Println("dog eat...")
  7. 7
    }
  8. 8

测试

  1. 1
    package main
  2. 2
  3. 3
    import "fmt"
  4. 4
  5. 5
    type Pet interface {
  6. 6
    eat()
  7. 7
    }
  8. 8
  9. 9
    type Dog struct {
  10. 10
    }
  11. 11
  12. 12
    type Cat struct {
  13. 13
    }
  14. 14
  15. 15
    func (cat Cat) eat() {
  16. 16
    fmt.Println("cat eat...")
  17. 17
    }
  18. 18
  19. 19
    func (dog Dog) eat() {
  20. 20
    fmt.Println("dog eat...")
  21. 21
    }
  22. 22
  23. 23
    func main() {
  24. 24
    var p Pet
  25. 25
    p = Cat{}
  26. 26
    p.eat()
  27. 27
    p = Dog{}
  28. 28
    p.eat()
  29. 29
    }

运行结果

  1. 1
    [Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
  2. 2
    cat eat...
  3. 3
    dog eat...

yg9538 2022年7月22日 22:48 574 收藏文档