使用go的interface案例实现多态范式操作

 更新时间:2020年12月23日 14:34:30   作者:涛歌依旧  
这篇文章主要介绍了使用go的interface案例实现多态范式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

看程序:

package main 
import "fmt" 
type BaseIntf interface {
 Process()
}
 
type Msg1 struct {
 req int
 rsp int
}
 
func (p *Msg1) Process() {
 fmt.Println("process 1")
}
 
type Msg2 struct {
 req int
 rsp int
}
 
func (p *Msg2) Process() {
 fmt.Println("process 2")
}
 
func main() {
 m1 := new(Msg1)
 m1.Process()
 
 m2 := new(Msg2)
 m2.Process()
}

变一下:

package main 
import "fmt" 
type BaseIntf interface {
 Process()
}
 
func Run(proc BaseIntf) {
 fmt.Println("run")
 proc.Process()
}
 
type Msg1 struct {
 req int
 rsp int
}
 
func (p *Msg1) Process() {
 fmt.Println("process 1")
} 
 
type Msg2 struct {
 req int
 rsp int
}
 
func (p *Msg2) Process() {
 fmt.Println("process 2")
} 
 
func main() {
 m1 := new(Msg1)
 Run(m1)
 
 m2 := new(Msg2)
 Run(m2)
}

这种风格的代码,见了很多次了。

不多说。

补充:go语言中通过空接口查询来实现多态

直接看代码吧~ 空接口算是go语言的精妙之处

package main
type Person struct {
 name string
 age int
}
type Cat struct {
 kind string
 sex bool
 price int
}
func main() {
 family := make([]interface{},0,10)
 obj1 := &Person{
 name: "吕云飞",
 age: 28,
 }
 obj2 := &Person{
 name: "胡景茹",
 age: 18,
 }
 obj3 := &Cat{
 kind: "英短",
 sex: true,
 price: 2000,
 }
 family = append(family, obj1, obj2, obj3)
 for _, value := range family {
 switch obj := value.(type) {
 case *Person:
 print(obj.name + "\n")
 case *Cat:
 print(obj.kind + "\n")
 }
 }
}

输出结果如下

吕云飞

胡景茹

英短

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Go语言并发之WaitGroup的用法详解

    Go语言并发之WaitGroup的用法详解

    这篇文章主要详细介绍了Go语言并发中得到WaitGroup,文中有相关的代码示例供大家参考,对我们的学习或工作有一定的参考价值,感兴趣的同学跟着小编一起来学习吧
    2023-06-06
  • Golang中的path/filepath包用法

    Golang中的path/filepath包用法

    这篇文章主要介绍了Golang中的path/filepath包用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Go 常见设计模式之单例模式详解

    Go 常见设计模式之单例模式详解

    单例模式是设计模式中最简单的一种模式,单例模式能够确保无论对象被实例化多少次,全局都只有一个实例存在,在Go 语言有多种方式可以实现单例模式,所以我们今天就来一起学习下吧
    2023-07-07
  • go语言中slice,map,channl底层原理

    go语言中slice,map,channl底层原理

    这篇文章主要介绍了go语言中slice,map,channl底层原理,slice,map,channl是我们Go语言中最最常用的几个数据结构,对于其更多相关内容需要的小伙伴可以参考下面文章详细内容
    2022-06-06
  • Go语言io pipe源码分析详情

    Go语言io pipe源码分析详情

    这篇文章主要介绍了Go语言io pipe源码分析详情,pipe是一个适配器,用于连接Reader和Writer,pipe的方法不多,新的写法却不少,并且结构体分两块,读写信道和结束标识,下面进入文章了解具体的内容吧
    2022-02-02
  • Golang导入包的几种方式(点,别名与下划线)

    Golang导入包的几种方式(点,别名与下划线)

    这篇文章主要介绍了Golang导入包的几种方式(点,别名与下划线),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • golang实现ftp实时传输文件的案例

    golang实现ftp实时传输文件的案例

    这篇文章主要介绍了golang实现ftp实时传输文件的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Golang中的关键字(defer、:=、go func())详细解读

    Golang中的关键字(defer、:=、go func())详细解读

    这篇文章主要介绍了Golang中的关键字(defer、:=、go func())详细解读,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • GO语言创建钱包并遍历钱包(wallet)的实现代码

    GO语言创建钱包并遍历钱包(wallet)的实现代码

    比特币钱包实际上是一个密钥对,当你安装 一个钱包应用,或者是使用一个比特币客户端来生成一个新地址是,他就会为你生成一个密钥对,今天通过本文给大家分享go语言遍历钱包的相关知识,一起看看吧
    2021-05-05
  • Golang中time.After的使用理解与释放问题

    Golang中time.After的使用理解与释放问题

    这篇文章主要给大家介绍了关于Golang中time.After的使用理解与释放问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08

最新评论