欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-03 19:10:24
看程序:package main import "fmt" type baseintf interface { process()} type msg1 struct { req int rsp in...

看程序:

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")
 }
 }
}

输出结果如下

吕云飞

胡景茹

英短

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