9-Go語言基礎-結構體(struct)

簡介

結構體是一種聚合類型,由0個或者多個任意類型的值聚合的實體,每個值稱爲結構體的成員。
結構體的成員首字母大小寫也遵循可導出的規則。首字母大寫的成員可導出。
結構體一般和json綁定使用,結構體成員首字母大寫則對json可見。
.操作可以獲取結構體的成員。
結構體是值類型。
結構體的零值是每個成員對應類型的零值
沒有任何成員的結構體是空結構體:struct。它的大小爲0,在編程中有很大的價值。
我在使用map模擬set的時候,會把空結構體作爲value:s:=make(map[string]struct{})

使用

  1. 結構體字面量
    字面量推薦寫出成員名字和對應值得鍵值對,防止以後成員順序變更導致代碼出錯。
    不顯式賦值的成員是默認零值。
package main
import (
	"fmt"

)

func main() {
	type Person struct{
		Name string
		Age int
	}
	var myself=Person{
		Name:"wz",
		Age:18,//另起一行的時候記得這個,必須加
	}

	fmt.Println("myself:",myself)//myself: {wz 18}
	fmt.Printf("myself:%+v",myself)//myself:{Name:wz Age:18}
}
  1. 結構體通常以指針的方式處理
var myself =&Person{}
  1. 結構體可以做相等比較,所有成員都相等纔會==
  2. 結構體嵌入
package main
import (
	"fmt"

)

func main() {
	
	type Company struct{
		CompanyName string
		CompanyAddress string
	}
	type Person struct{
		MyCompany Company
		Name string
		Age int
	}
	var myself=Person{
		Name:"wz",
		Age:18,//另起一行的時候記得這個,必須加
		MyCompany:Company{
			Name:"我的公司",
			Address:"北京",
		},
	}

	fmt.Println("myself.MyCompany.Name:",myself.MyCompany.Name)//myself.MyCompany.Name: 我的公司
	fmt.Printf("myself:%+v",myself)//myself:{MyCompany:{Name:我的公司 Address:北京} Name:wz Age:18}
}
  1. 結構體匿名成員
    匿名成員不支持顯式成員名字的字面量賦值,但是可以直接字面量賦值,可以當做根成員訪問到。
type Company struct{
		CompanyName string
		CompanyAddress string
	}
type Person struct{
		Company
		Name string
		Age int
	}
var myself=&Person {}
myself.CompanyName //不要成員名稱重複
  1. json和結構體
    encoding/json 包可以使用。
    具體的使用方法,在連接mysql使用gorm第三方庫的時候可以再進一步的分析。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章