有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的;继承,就是指 class 之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了。

  作为集大成者的 Go 语言,自然不会在面向对象上面无所作为。相比较 java、C#、C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解。下面,我们不妨用三个简单的例子来说明一下 go 语言下的面向对象是什么样的。

封装特性

package main

import "fmt"

type data struct {
    val int
}

func (p_data *data) set(num int) {
    p_data.val = num
}

func (p_data *data) show() {
    fmt.Println(p_data.val)
}

func main() {
    p_data := &data{4}
    p_data.set(5)
    p_data.show()
}  



继承特性

package main

import "fmt"

type parent struct {
    val int
}

type child struct {
    parent
    num int
}

func main() {
    var c child

    c = child{parent{1}, 2}
    fmt.Println(c.num)
    fmt.Println(c.val)
}


多态特性

package main

import "fmt"

type act interface {
    write()
}

type xiaoming struct {

}

type xiaofang struct {

}

func (xm *xiaoming) write() {
    fmt.Println("xiaoming write")
}

func (xf *xiaofang) write() {
    fmt.Println("xiaofang write")
}

func main() {
    var w act;

    xm := xiaoming{}
    xf := xiaofang{}

    w = &xm
    w.write()

    w = &xf
    w.write()
}
01-25 14:09