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里沒(méi)有提供直接繼承
某一個(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())
}
}