您现在的位置是:网站首页> 编程资料编程资料
深入理解Go语言实现多态 _Golang_
2023-05-26
444人已围观
简介 深入理解Go语言实现多态 _Golang_
多态是什么
相信学过Java这种面向对象语言的同学对于多态来说都不陌生,在代码执行的时候,能够根据子类的类型去执行子类当中的方法。多态是指代码可以根据类型的具体实现采取不同行为的能力。如果一个类型实现了某个接口,所有使用这个接口的地方,都可以支持这种类型的值。
Go语言多态举例
有这样一个场景,我们在应用开发中涉及到很多通知事件,通知的类型可以是通过微信、QQ、Email等,那么我们可以抽象出一个接口,定义一个通知的接口,然后微信通知类、QQ通知类、Email通知类分别实现对应的通知方法。
定义一个通知类型:notifier
// 通知者接口 type Notifier interface { // 通知方法,可以由具体的类进行实现 notify() } 定义微信类型、QQ类型、Email类型,并实现notify方法,以指针类型作为方法的接收者
type WechatNotifier struct { Name string Message string } func (w *WechatNotifier) notify() { fmt.Printf("%v notify %v \n", w.Name, w.Message) } type QQNotifier struct { Name string Message string } func (q *QQNotifier) notify() { fmt.Printf("%v notify %v \n", q.Name, q.Message) } type EmailNotifier struct { Name string Message string } func (e *EmailNotifier) notify() { fmt.Printf("%v notify %v \n", e.Name, e.Message) }定义发送通知方法,入参为Notifier;等需要调用的时候,需要传入实现了Notifier中的接口的类型
func sendNotify(notifier Notifier) { notifier.notify() } 测试一下
func main() { w := &WechatNotifier{ Name: "微信", Message: "微信消息", } q := &QQNotifier{ Name: "QQ", Message: "QQ消息", } e := &EmailNotifier{ Name: "Email", Message: "Email消息", } // 接受微信类型 sendNotify(w) // 接受QQ类型 sendNotify(q) // 接受Email类型 sendNotify(e) }测试结果如下:

总结
Golang中主要是采用了接口来实现多态,先定义一个抽象接口,然后再定义具体的实现类并实现接口中的方法,当我们需要定义一个通用的方法时,方法的入参可以接收一个接口类型,这样在程序设计的时候就可以不必多写类似的方法从而接受不同的类了,在程序的运行时,就可以动态地把该接口指向的具体类型,从而执行具体类型的方法!
到此这篇关于深入理解Go语言实现多态 的文章就介绍到这了,更多相关Go语言 多态 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
相关内容
- 通过Golang编写一个AES加密解密工具_Golang_
- Golang实现AES加密和解密的示例代码_Golang_
- 使用client go实现自定义控制器的方法_Golang_
- 使用GO操作MongoDB的方法_Golang_
- Go语言实现23种设计模式的使用_Golang_
- golang通过node_exporter监控GPU及cpu频率、温度的代码_Golang_
- 详解go mod 使用方法_Golang_
- 详解如何在Go语言中调用C源代码_Golang_
- Go 处理大数组使用 for range 和 for 循环的区别_Golang_
- Go 函数中获取调用者的函数名和文件名及行号_Golang_
