速戰速決 go https://github.com/webabcd/GoSample
作者 webabcd
速戰速決 go - go 面向對象: 結構體(內嵌結構體,內嵌結構體實現類似繼承的效果,內嵌匿名結構體,內嵌類型)
示例如下:
oop/struct2.go
// go 面向對象 - 結構體(內嵌結構體,內嵌結構體實現類似繼承的效果,內嵌匿名結構體,內嵌類型)
package oop
import "fmt"
func Struct2Sample() {
struct2_sample1()
}
func struct2_sample1() {
a := &struct22{}
a.c = true
a.a = 0 // 可以直接使用內嵌結構體的成員,當然也可以像這樣寫全了 a.struct21.a(如果成員名字有衝突,則必須按照這種方式使用)
a.b = "abc" // 可以直接使用內嵌結構體的成員,當然也可以像這樣寫全了 a.struct21.b(如果成員名字有衝突,則必須按照這種方式使用)
a.d.x = 123
a.d.y = "xyz"
a.float32 = 3.14 // 使用內嵌類型
fmt.Println(a) // &{true {0 abc} {123 xyz} 3.14}
// 順序初始化(所有成員都要初始化)
b := &struct22{
true,
struct21{
0,
"abc",
},
// 內嵌匿名結構體的初始化
struct {
x int
y string
}{
123,
"xyz",
},
3.14,
}
fmt.Println(b) // &{true {0 abc} {123 xyz} 3.14}
// 按 key/value 初始化(不要求所有成員都初始化)
c := &struct22{
c: true,
struct21: struct21{
0,
"abc",
},
// 內嵌匿名結構體的初始化
d: struct {
x int
y string
}{
123,
"xyz",
},
float32: 3.14,
}
fmt.Println(c) // &{true {0 abc} {123 xyz} 3.14}
}
type struct21 struct {
a int
b string
}
type struct22 struct {
c bool
// 內嵌結構體(同類型的只能有一個)
// 內嵌結構體可以實現類似繼承的效果,這裏相當於 Struct21 是基類,Struct22 是子類
struct21
// 內嵌匿名結構體
d struct {
x int
y string
}
// 內嵌類型(同類型的只能有一個)
float32
}
速戰速決 go https://github.com/webabcd/GoSample
作者 webabcd