go中的接口与多态

简介: go中的接口与多态

小熊不小心把自己的电脑刷成砖了。哭了。。

image.png



本来想格式化下盘,谁知道格式化完以后啥都没有,连系统都没了,几乎和 rm -rf / 有得一拼!


image.png


按官网给的方法试了,启动 u 盘制作不成功,制作成功了识别不出来,尝试网络恢复发现只能连美国的服务器,好不容易连上了,等了两个小时结果无法验证 OS !

网络异常,图片无法展示
|

搞了两天到现在都没搞定,只能等明天再背去公司试试了。

今天和大家聊聊 golang 的接口( interface


接口


接口同 java 一样,可以把一堆有共性的方法定义在里面,但是比 java 灵活的是,不需要显式实现接口,你可以自己控制实现哪些方法。


不需要显式实现的意思是,不需要像 java 那样 implements interface 写出来,别急,看完下面的例子就知道了。


定义一个接口。

type humanInterface interface {
  eat() string
  play() string
}

定义一个结构体(类)


type man struct {
  name string
}


实现接口,语法和 给结构体添加方法 一样,完全看不出来 接口 的身影。

func (p man) eat() string {
  return "eat banana"
}
func (p man) play() string {
  return "play game"
}

上面的代码给结构体添加了和接口一样的方法,只要完全实现接口中的方式,默认这就实现接口(隐式)。


用下面这样的格式,把结构体赋值给接口来实现他

接口实例 = new(类型)

var human humanInterface
human = new(man)
fmt.Println(human.eat())
fmt.Println(human.play())

输出


eat banana
play game


PS: new 关键字和 c++ 中的不同,释放内存由 go 的垃圾处理机来做,不需要自己释放内存。


这不是接口


上面的是一个很简单实现接口的例子。

要注意的是,必须实现了所有接口的方法才算是实现了这个接口。

假如我们只实现了接口中的一个方法,会发生什么事?


type dogInterface interface {
  eat() string
  play() string
}
type dog1 struct {
  name string
}
func (d dog1) eat() string {
  return "Eat dog food"
}
var dog dogInterface
dog = new(dog1)


报错

报错:Cannot use 'new(dog1)' (type *dog1) as type dogInterface in assignment
Type does not implement 'dogInterface' as some methods are missing: play() string more...

多态


当然,多态是面向对象的灵魂, go 怎么能没有?

这是一个以接口为参数的函数,方法内调用了接口中方法。


func humanDoWhat(p humanInterface) {
  fmt.Println(p.eat())
  fmt.Println(p.play())
}

传入不同的类(结构体)


w := woman{"lisa"}
m := man{"coding3min"}
// 多态的含义就是不需要修改函数,只需要修改外部实现
// 同一个接口有不同的表现
humanDoWhat(w)
humanDoWhat(m)


不同输出

lisaeat rice
lisawatch TV
coding3mineat banana
coding3minplay game


java 中的多态有三个必要条件


  • 继承
  • 重写
  • 父类引用指向子类对象


但是 go 没有继承、重写, go 作为一种优雅的语言, 给我们提供了这种解决方案,那就是鸭子类型:看起来 像鸭子, 那么它就是 鸭子


周末愉快~ 希望我的电脑我能自己弄好

相关文章
|
6天前
|
设计模式 存储 监控
《Go 简易速速上手小册》第4章:接口与抽象(2024 最新版)(上)
《Go 简易速速上手小册》第4章:接口与抽象(2024 最新版)
46 1
|
6天前
|
自然语言处理 Go 索引
Go语言学习8-接口类型
【4月更文挑战第1天】本篇 Huazie 向大家介绍 Go 语言中的接口类型
22 2
Go语言学习8-接口类型
|
6天前
|
Go
|
6天前
|
程序员 Go
|
6天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
6天前
|
存储 Go 开发者
【Go语言专栏】深入探索Go语言的接口与多态
【4月更文挑战第30天】本文探讨了Go语言中的接口和多态性。接口是方法集合的抽象类型,允许不同类型的值实现相同的方法,实现多态。接口定义不包含实现,仅包含方法签名。类型实现接口是隐式的,只要实现了接口所需的方法。接口用于编写与具体类型无关的通用代码。通过接口,不同类型的对象可以响应相同消息,展现多态性。此外,接口可以嵌入以继承其他接口,类型断言则用于访问接口内部的具体类型。空接口可存储任何类型值。理解并掌握接口有助于编写更灵活、模块化的Go代码。
|
6天前
|
存储 设计模式 Go
《Go 简易速速上手小册》第4章:接口与抽象(2024 最新版)(下)
《Go 简易速速上手小册》第4章:接口与抽象(2024 最新版)
27 1
|
6天前
|
安全 Go
接口在Go语言中的实现与应用
【2月更文挑战第19天】接口是Go语言中一种重要的抽象机制,它定义了一组方法的集合,而不关注具体的实现。本文将深入探讨Go语言中接口的实现方式、接口的应用场景以及接口在Go语言设计中的优势,帮助读者更好地理解和应用接口。
|
6天前
|
Cloud Native Go 数据库
一文搞懂Go搭建Restful接口
一文搞懂Go搭建Restful接口
20 0
|
6天前
|
Go
深入理解Go的接口和类型断言
深入理解Go的接口和类型断言
77 0