千家信息网

Go语言如何实现多态

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇"Go语言如何实现多态 "文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Go语言如
千家信息网最后更新 2025年01月16日Go语言如何实现多态

这篇"Go语言如何实现多态 "文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Go语言如何实现多态 "文章吧。

多态是什么

相信学过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)}

测试结果如下:

以上就是关于"Go语言如何实现多态 "这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

0