使用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")
}
}
}
输出结果如下
吕云飞
胡景茹
英短
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
