简介
结构体是一种聚合类型,由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第三方库的时候可以再进一步的分析。