速戰速決 go - go 面向對象: 結構體(內嵌結構體,內嵌結構體實現類似繼承的效果,內嵌匿名結構體,內嵌類型)

速戰速決 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章