当前位置 博文首页 > 使用go的interface案例实现多态范式操作

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

    作者:涛歌依旧 时间:2021-02-04 12:13

    看程序:

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

    输出结果如下

    吕云飞

    胡景茹

    英短

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

    js
    下一篇:没有了