使用go的interface案例实现多态范式操作
看程序:
packagemain import"fmt" typeBaseIntfinterface{ Process() } typeMsg1struct{ reqint rspint } func(p*Msg1)Process(){ fmt.Println("process1") } typeMsg2struct{ reqint rspint } func(p*Msg2)Process(){ fmt.Println("process2") } funcmain(){ m1:=new(Msg1) m1.Process() m2:=new(Msg2) m2.Process() }
变一下:
packagemain import"fmt" typeBaseIntfinterface{ Process() } funcRun(procBaseIntf){ fmt.Println("run") proc.Process() } typeMsg1struct{ reqint rspint } func(p*Msg1)Process(){ fmt.Println("process1") } typeMsg2struct{ reqint rspint } func(p*Msg2)Process(){ fmt.Println("process2") } funcmain(){ m1:=new(Msg1) Run(m1) m2:=new(Msg2) Run(m2) }
这种风格的代码,见了很多次了。
不多说。
补充:go语言中通过空接口查询来实现多态
直接看代码吧~空接口算是go语言的精妙之处
packagemain typePersonstruct{ namestring ageint } typeCatstruct{ kindstring sexbool priceint } funcmain(){ 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:=rangefamily{ switchobj:=value.(type){ case*Person: print(obj.name+"\n") case*Cat: print(obj.kind+"\n") } } }
输出结果如下
吕云飞
胡景茹
英短
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。