簡介
結構體是一種聚合類型,由0個或者多個任意類型的值聚合的實體,每個值稱爲結構體的成員。
結構體的成員首字母大小寫也遵循可導出的規則。首字母大寫的成員可導出。
結構體一般和json綁定使用,結構體成員首字母大寫則對json可見。
.操作可以獲取結構體的成員。
結構體是值類型。
結構體的零值是每個成員對應類型的零值
沒有任何成員的結構體是空結構體:struct
。它的大小爲0,在編程中有很大的價值。
我在使用map模擬set的時候,會把空結構體作爲value:s:=make(map[string]struct{})
使用
- 結構體字面量
字面量推薦寫出成員名字和對應值得鍵值對,防止以後成員順序變更導致代碼出錯。
不顯式賦值的成員是默認零值。
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}
}
- 結構體通常以指針的方式處理
var myself =&Person{}
- 結構體可以做相等比較,所有成員都相等纔會
==
- 結構體嵌入
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}
}
- 結構體匿名成員
匿名成員不支持顯式成員名字的字面量賦值,但是可以直接字面量賦值,可以當做根成員訪問到。
type Company struct{
CompanyName string
CompanyAddress string
}
type Person struct{
Company
Name string
Age int
}
var myself=&Person {}
myself.CompanyName //不要成員名稱重複
- json和結構體
encoding/json 包可以使用。
具體的使用方法,在連接mysql使用gorm第三方庫的時候可以再進一步的分析。