# Go学习-Day6 | 青训营

64 阅读1分钟

Go学习-Day6

封装

  • 类似java的类的封装,这里我们利用大小写和工厂模式来实现封装的功能
  • 略过

继承

  • 相似的类具有相似的方法,反复绑定相同的方法,代码冗余,所以引入了继承的概念
  • 嵌套匿名结构体来实现继承的效果
  • 动手实践!
  • type Node struct {
        Name     string `json:"name"`
        Password string `json:"password"`
    }
    ​
    type Point struct {
        Node
        X int
        Y int
    }
    ​
    func (a *Node) ok() {
        a.Name = "bbbb"
    }
    func main() {
    ​
        var a Point = Point{
            Node{"aaa", "bbb"},
            1,
            2,
        }
    ​
        a.ok()
    ​
        fmt.Println(a)
    }
    
  • 注意看,a.ok()其实是a.Node.ok()底层自动识别,可以省略匿名结构体
  • 基本数据类型可以匿名,但是不能出现多个相同类型的匿名基本类型

接口

  • 多态主要就是由接口来实现的
  • 声明
  • type inter interface {
        a()
        b()
    }
    
  • 实现接口
  • import "fmt"type inter interface {
        a()
        b()
    }
    type obj1 struct {
    }
    ​
    type union struct {
    }
    ​
    func (o obj1) a() {
        fmt.Println("okkk")
        //用node对象给接口的a()实现
    }
    ​
    func (o obj1) b() {
        fmt.Println("ohhh")
    }
    ​
    func (u union) ok(in inter) {
        in.a()
        in.b()
    }
    ​
    func main() {
    ​
        x := union{}
        y := obj1{}
        x.ok(y)
    }
    ​
    
  • 从上面我们可以看到,在声明一个接口之后,我们用工厂方法法obj对应接口的所有方法给实现了,然后另外整一个抽象类似的的结构体,绑定一个方法运行接口,这样我们就能通过接口把这两个类给链接在一起。
  • 总结。
  • interface类型可以定义一组方法,方法不用实现,并且不能含有变量
  • Go语言没有implements关键字,只要一个变量类型,绑定了接口中所有的方法,这个变量就能实现这个接口
  • 这个变量就能导入到含有接口作为变量的函数内