Golang struct(结构体)

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}

结构体还有一个强大的功能,就是为结构体定义方法,这个我们后面和函数一起讲解。