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

输出结果如下

吕云飞

胡景茹

英短

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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐