溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang學習筆記(六):struct

發布時間:2020-08-24 18:26:43 來源:腳本之家 閱讀:147 作者:junjie 欄目:編程語言

struct

struct,一組字段的集合,類似其他語言的class

放棄了大量包括繼承在內的面向對象特性,只保留了組合(composition)這個最基礎的特性

1.聲明及初始化

復制代碼 代碼如下:

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的匿名字段(繼承)

復制代碼 代碼如下:

type Human struct {
    name string
    age int
    weight int
}

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

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

mark.name
mark.age


能夠實現字段繼承,當字段名重復的時候,優先取外層的,可以通過指定struct名還決定取哪個
復制代碼 代碼如下:

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

struct不僅可以使用struct作為匿名字段,自定義類型、內置類型都可以作為匿名字段,而且可以在相應字段上做函數操作

3.method

復制代碼 代碼如下:

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

//method


Reciver 默認以值傳遞,而非引用傳遞,還可以是指針
指針作為Receiver會對實例對象的內容發生操作,而普通類型作為Receiver僅僅是以副本作為操作對象,而不對原實例對象發生操作
復制代碼 代碼如下:

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

}


如果一個method的receiver是*T,調用時,可以傳遞一個T類型的實例變量V,而不必用&V去調用這個method
復制代碼 代碼如下:

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

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

4.method繼承和重寫

采用組合的方式實現繼承

復制代碼 代碼如下:

type Human struct {
    name string
}

type Student struct {
    Human
    School string
}

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

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

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

}


還可以進行方法重寫
復制代碼 代碼如下:

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女