国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Golang > 正文

Golang學(xué)習(xí)筆記(六):struct

2020-04-01 19:14:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Golang學(xué)習(xí)筆記(六):struct,本文講解了struct的聲明及初始化、struct的匿名字段(繼承)、method、method繼承和重寫(xiě)等內(nèi)容,需要的朋友可以參考下
 

struct

struct,一組字段的集合,類(lèi)似其他語(yǔ)言的class

放棄了大量包括繼承在內(nèi)的面向?qū)ο筇匦裕槐A袅私M合(composition)這個(gè)最基礎(chǔ)的特性

1.聲明及初始化

復(fù)制代碼代碼如下:

type person struct {
    name string
    age  int
}

 

//初始化

func main() {
    var P person

    P.name = "tom"
    P.age = 25
    fmt.Println(P.name)

    P1 := person{"Tom1", 25}
    fmt.Println(P1.name)

    P2 := person{age: 24, name: "Tom"}
    fmt.Println(P2.name)
}

 

2.struct的匿名字段(繼承)

復(fù)制代碼代碼如下:

type Human struct {
    name string
    age int
    weight int
}

 

tyep Student struct {
    Human //匿名字段,默認(rèn)Student包含了Human的所有字段
    speciality string
}

mark := Student(Human{"mark", 25, 120}, "Computer Science")

mark.name
mark.age


能夠?qū)崿F(xiàn)字段繼承,當(dāng)字段名重復(fù)的時(shí)候,優(yōu)先取外層的,可以通過(guò)指定struct名還決定取哪個(gè)
復(fù)制代碼代碼如下:

mark.Human = Human{"a", 55, 220}
mark.Human.age -= 1

struct不僅可以使用struct作為匿名字段,自定義類(lèi)型、內(nèi)置類(lèi)型都可以作為匿名字段,而且可以在相應(yīng)字段上做函數(shù)操作

 

3.method

復(fù)制代碼代碼如下:

type Rect struct {
    x, y float64
    width, height float64
}

 

//method


Reciver 默認(rèn)以值傳遞,而非引用傳遞,還可以是指針
指針作為Receiver會(huì)對(duì)實(shí)例對(duì)象的內(nèi)容發(fā)生操作,而普通類(lèi)型作為Receiver僅僅是以副本作為操作對(duì)象,而不對(duì)原實(shí)例對(duì)象發(fā)生操作
復(fù)制代碼代碼如下:

func (r ReciverType) funcName(params) (results) {

 

}


如果一個(gè)method的receiver是*T,調(diào)用時(shí),可以傳遞一個(gè)T類(lèi)型的實(shí)例變量V,而不必用&V去調(diào)用這個(gè)method
復(fù)制代碼代碼如下:

func (r *Rect) Area() float64 {
    return r.width * r.height
}

 

func (b *Box) SetColor(c Color) {
    b.color = c
}

 

4.method繼承和重寫(xiě)

采用組合的方式實(shí)現(xiàn)繼承

復(fù)制代碼代碼如下:

type Human struct {
    name string
}

 

type Student struct {
    Human
    School string
}

func (h *Human) SayHi() {
    fmt.Println(h.name)
}

//則Student和Employee的實(shí)例可以調(diào)用
func main() {
    h := Human{name: "human"}
    fmt.Print(h.name)
    h.SayHi()

    s := Student{Human{"student"}}
    s.SayHi()

}


還可以進(jìn)行方法重寫(xiě)
復(fù)制代碼代碼如下:

funct (e *Student) SayHi() {
    e.Human.SayHi()
    fmt.Println(e.School)
}
 

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 闻喜县| 甘洛县| 和田县| 新晃| 大渡口区| 广东省| 抚州市| 凉山| 葫芦岛市| 东乡族自治县| 运城市| 南岸区| 民丰县| 易门县| 多伦县| 西城区| 岐山县| 溧水县| 米脂县| 天等县| 砀山县| 腾冲县| 台湾省| 遂川县| 灵山县| 开江县| 河西区| 平谷区| 两当县| 社会| 华坪县| 汉川市| 咸丰县| 泸溪县| 大埔县| 望江县| 弥勒县| 河北区| 古交市| 攀枝花市| 静海县|