十九 Go基礎程式設計 物件導向 匿名組合

2021-08-30 15:15:17 字數 2210 閱讀 2639

一般情況下,定義結構體的時候是欄位名與其型別一一對應,實際上go支援只提供型別,而不寫欄位名的方式,也就是匿名字段,也稱為嵌入字段。

當匿名欄位也是乙個結構體的時候,那麼這個結構體所擁有的全部欄位都被隱式地引入了當前定義的這個結構體。

//人

type person struct

//學生

type student struct

//人

type person struct

//學生

type student struct

func main() , 1, "sz"}

//s1 = id:1 addr:sz}

fmt.printf("s1 = %+v\n", s1)

//s2 := student //err

//部分成員初始化1

s3 := student, id: 2}

//s3 = id:2 addr:}

fmt.printf("s3 = %+v\n", s3)

//部分成員初始化2

s4 := student, id: 3}

//s4 = id:3 addr:}

fmt.printf("s4 = %+v\n", s4)

}

var s1 student //變數宣告

//給成員賦值

s1.name = "mike" //等價於 s1.person.name = "mike"

s1.*** = 'm'

s1.age = 18

s1.id = 1

s1.addr = "sz"

fmt.println(s1) // 1 sz}

var s2 student //變數宣告

s2.person = person

s2.id = 2

s2.addr = "bj"

fmt.println(s2) // 2 bj}

//人

type person struct

//學生

type student struct

func main() id:0 addr: name:mike}

fmt.printf("%+v\n", s)

//預設只會給最外層的成員賦值

//給匿名同名成員賦值,需要顯示呼叫

s.person.name = "yoyo"

//person: id:0 addr: name:mike}

fmt.printf("%+v\n", s)

}

所有的內建型別和自定義型別都是可以作為匿名欄位的:

type mystr string //自定義型別

type person struct

type student struct

func main() , 1, "bj"}

// int:1 mystr:bj}

fmt.printf("%+v\n", s1)

//成員的操作,列印結果:mike, m, 18, 1, bj

fmt.printf("%s, %c, %d, %d, %s\n", s1.name, s1.***, s1.age, s1.int, s1.mystr)

}

type person struct 

type student struct

func main() , 1, "bj"}

//fmt.printf("%+v\n", s1)

//mike, m, 18

fmt.printf("%s, %c, %d\n", s1.name, s1.***, s1.age)

//宣告變數

var s2 student

s2.person = new(person) //分配空間

s2.name = "yoyo"

s2.*** = 'f'

s2.age = 20

s2.id = 2

s2.addr = "sz"

//yoyo 102 20 2 20

fmt.println(s2.name, s2.***, s2.age, s2.id, s2.age)

}

Go 物件導向程式設計

值語義與引用語義的區別在於賦值。值型別不會改變變數值,引用型別會改變變數值。go 語言中大多數型別都是基於值語義,包括 基本型別 如byte int bool float32 float64和string 復合型別 如陣列 array 結構體 struct 和指標 pointer 等。go語言中的陣...

Go的物件導向程式設計

func p point distance q point float64 p point q point fmt.println distance p,q 5 function call fmt.println p.distance q 5 method call 裡那個附加的引數p,叫做方法的接...

go物件導向程式設計 封裝

將結構體 屬性的字段設定為小寫 給結構體所在的包提供乙個工廠模式,首字母大寫,類似於乙個建構函式 提供乙個首字母大寫的set方法,用於對屬性的判斷並賦值func c student setscore score float64 提供乙個首字母大寫的get方法,用於獲取屬性值func 封裝的實現 ty...