Struct
很多時(shí)候,我們需要自定義新的數(shù)據(jù)類型,C++里可以用class,Golang里面也同樣擁有類似的定義,稱之為struct。為一個(gè)struct類型,也擁有自己的方法,屬性。
Method
為struct定義方法也是非常簡(jiǎn)單的,對(duì)比C++,不需要顯示的將方法寫在class聲明里
func (Coder)GetBestAreas() string {
...
}
可以按如下的方法進(jìn)行調(diào)用
c := Coder{name:"Li", skills:[]stirng{"C++","Golang"}}
fmt.Println(c.GetBestAreas())
Embedding
Golang里沒有提供直接繼承某一個(gè)struct的方法,但是卻可以通過(guò)embedding字段(匿名字段)來(lái)實(shí)現(xiàn)。例如我們有一個(gè)Student的struct
type Human struct {
name string
sex string
...
}
還有一個(gè)用來(lái)描述程序員的struct:
type Coder struct{
name string
sex string
...
skills []string
}
在Human和Coder里重復(fù)定義了name和sex字段,那么這時(shí)可以通過(guò)在Coder里嵌入Human類型來(lái)直接使用Human中的字段
type Coder struct {
Human
skills []string
}
Interface
如果說(shuō)struct是一個(gè)class,那么他只能定義不含虛函數(shù)的方法,而interface確實(shí)只能定義純虛函數(shù),并不能含有任何字段。
type Animal interface {
Sound() string
}
type Cat struct {
}
func (Cat) Sound() string {
return "Miao"
}
type Dog struct {
}
func (Dog) Sound() string {
return "Wang"
}
func main() {
animals := []Animal{Dog{}, Cat{}}
for _, animal := range animals {
fmt.Println(animal.Sound())
}
}