golang语言是一门2012年才发布1.0版本的一门年轻的语言,但是年轻不并影响他的影响力,使用golang的公司越来越多。据说go语言的发明是为了解决21世纪多核和网络环境下越来越复杂的编程问题。go的创始人有:Robert Griesemer,Rob Pike,Ken Thompson,有没有看到那个很熟悉的名字,没错,就是大名鼎鼎的Ken Thompson,他是C语言和Unix的发明人,当时他和Dennis Ritchie一起设计了C语言,注定go语言里面会看到C和C++的影子。在使用的过程中,我们可以找其相似的地方。

C++里面有类的概念,每个类里面有其隐藏的this指针,那么在go里面怎么可以看到类似类功能的影子呢?

C++里面类包括成员变量和成员函数,是在类里面声明和初始化,还有构造函数,析构函数功能。

go里面的类:

go里面的结构体类似C++里面的类,看如下代码:

package main
import (
    "fmt"
)

type Student struct {
    Name  string
    Age   int
    Score int
}

func (this *Student) gouzao(name string, age int, score int) {
    this.Name = name
    this.Age  = age
    this.Score = score
}

func(this *Student) getName () string{
    return this.Name
}

func(this *Student) print(){
    fmt.Printf("Name:%s, Age:%d, Score:%d\n", this.Name, this.Age, this.Score)
}

func main() {

    stu := Student{Name:"lsp", Age:12, Score:88}
    stu.print();
    fmt.Println("get:", stu.getName())

}
 

go里面的继承,继承的功能就是让子类可以使用父类的成员方法和成员变量,即子类可以将父类的功能继承过来。

看下面代码,Car类似父类,Bike和Train为子类,子类可以使用父类的函数Run

同理,多重继承,就多放几个需要继承的struct。

package main
import (
    "fmt"
)

type Car struct {
    wheel string
    jiashiyuan  string
}

func(this *Car) Run() {
    fmt.Println("Running:", this.wheel)
}

type Bike struct {
    c Car
    handlebar string
}

type Train struct {
    c Car
    streewheel string
}

func main() {
    c := Car{wheel:"yuande", jiashiyuan:"person"}
    b := Bike{c:c, handlebar:"cheba"}
    t := Train{c:c, streewheel:"fangxiangpan"}
    b.c.Run();
    t.c.Run();

}