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();
}