Golang的结构体–struct,和C语言类似,也有点类似Java中的类。
简单来说,结构体就是能让我们自定义数据类型。
定义格式:
type 结构体名称 struct {
定义属性1 属性类型
定义属性2 属性类型
}
初始化和赋值:
我们来看一下格式定义和初始化的代码,其中包含四种初始化和赋值方式
package main
import "fmt"
type person struct {
name string "姓名"
age int "年龄"
sex string "性别"
height int "身高cm"
weight int "体重kg"
}
func main() {
//struct初始化的几种方法
//只申请内存
p1 := new(person)
p2 := &person{}
//全部属性指定值,可以不写对应的key
p3 := &person{"张三",20,"男",170,60}
//只赋值一部分属性,需要指定key
p4 := &person{name:"张三",age:20,sex:"男"}
//初始化方式一的赋值
p1.name = "张三2"
//初始化方式二的赋值
p2.name = "张三"
fmt.Println(p1)
fmt.Println(p2)
fmt.Println(p3)
fmt.Println(p4)
}
输出结果:
&{张三2 0 0 0}
&{张三 0 0 0}
&{张三 20 男 170 60}
&{张三 20 男 0 0}
结构体的组合
结构体的组合,就是在一个结构体的定义中引入另一个已定义的结构体,形成一个包含关系,这在Go中是组合。
类似顶一个一个地址结构体:
type address struct {
city string "所在城市"
}
那么每个person都有一个地址,所以,我不用在person中定义地址相关属性,直接引用地址这个结构体就行了。
type person2 struct {
name string "姓名"
age int "年龄"
sex string "性别"
height int "身高cm"
weight int "体重kg"
*address
}
这里的结构体最后一行,*address,就引入的定义的地址结构体。
结构体的引用演示代码:
package main
import "fmt"
type person2 struct {
name string "姓名"
age int "年龄"
sex string "性别"
height int "身高cm"
weight int "体重kg"
*address
}
type address struct {
city string "所在城市"
}
func main() {
//全部属性指定值,可以不写对应的key
addr := &address{"上海"}
p3 := &person2{"张三",20,"男",170,60,addr}
//只赋值一部分属性,需要指定key
p4 := &person2{name:"张三",age:20,sex:"男",address:addr}
fmt.Println(p3)
fmt.Println(p4)
}
输出结果:
&{张三 20 男 170 60 0xc00004e1c0}
&{张三 20 男 0 0 0xc00004e1c0}
结构体还有一个强大的功能,就是为结构体定义方法,这个我们后面和函数一起讲解。