看程序:
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的interface案例实现多态范式操作》,本文关键词 使用,的,interface,案例,实现,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。