目录

前言

1、定义结构体

2、访问结构体成员

3、结构体作为函数参数

4、结构体指针


前言

数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体表示一项纪录,比如班级的学生信息,每个人有以下属性:

Name:姓名

Sex:性别

Age:年龄

ID card :身份证

1、定义结构体

结构体定义需要使用 typestruct 语句。

type 语句设定了结构体名称。

struct 语句定义一个新的数据类型,结构体中有一个或多个成员。

语法格式:

var struct_variable_type struct {
    member definition
    member definition
    ...
    member definition
}

一旦定义了结构体类型,它就能用于变量的声明,格式如下:

variable_name := struct_variable_type {value1, value2, ...valuen}
或
variable_name := struct_variable_type {key1:value1, key2:value2, ...keyn:valuen}

示例:

package main

import "fmt"

//定义结构体
func main() {
	//结构体声明
	type Person struct {
		name    string
		sex     string
		age     int
		id_card int
	}
	//按顺序进行初始化
	fmt.Println("顺序初始化结构体:", Person{"zhangsan", "男", 18, 123456789})
	//按键名赋值初始化
	fmt.Println("按键名赋值结构体:", Person{name: "qianqi", sex: "女", age: 22, id_card: 324465992})
	//部分属性赋值初始化
	fmt.Println("部分赋值结构体:", Person{name: "laoba"})
}

//运行结果为:
顺序初始化结构体: {zhangsan 男 18 123456789}
按键名赋值结构体: {qianqi 女 22 324465992}
部分赋值结构体: {laoba  0 0}

2、访问结构体成员

要访问结构体成员,需要使用点号 . 操作符,格式为:

结构体.成员名

示例:

package main

import "fmt"

//定义结构体
func main() {
	//结构体声明
	type Person struct {
		name    string
		sex     string
		age     int
		id_card int
	}
	//结构体类型的变量
	var (
		person1 Person
		person2 Person
	)
	//给person1赋值
	person1.name = "tom"
	person1.sex = "man"
	person1.age = 20
	person1.id_card = 56151165

	//给person2赋值
	person2.name = "tianqi"
	person2.sex = "nv"
	person2.age = 18
	person2.id_card = 88416516

	fmt.Println(person1)
	fmt.Println(person2)
}

//运行结果为:
{tom man 20 56151165}
{tianqi nv 18 88416516}

3、结构体作为函数参数

可以像其他数据类型一样将结构体类型作为参数传递给函数。

示例:

package main

import "fmt"

//结构体声明
type Person struct {
	name    string
	sex     string
	age     int
	id_card int
}

//定义结构体
func main() {

	//结构体类型的变量
	var (
		person1 Person
		person2 Person
	)
	//给person1赋值
	person1.name = "tom"
	person1.sex = "man"
	person1.age = 20
	person1.id_card = 56151165

	//给person2赋值
	person2.name = "tianqi"
	person2.sex = "nv"
	person2.age = 18
	person2.id_card = 88416516

	//使用函数传参结构体类型数据
	personIofo(person1)
	personIofo(person2)

}

//函数定义结构体为形式参数进行传入
func personIofo(x Person) {
	fmt.Println("姓名:", x.name)
	fmt.Println("性别:", x.sex)
	fmt.Println("年龄:", x.age)
	fmt.Println("id:", x.id_card)
}

//运行结果为:
姓名: tom
性别: man
年龄: 20
id: 56151165
姓名: tianqi
性别: nv
年龄: 18
id: 88416516

4、结构体指针

可以定义结构体的指针类似于其他指针变量,格式如下:

var struct_pointer *Person

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前。

struct_pointer = &Person

使用结构体指针访问结构体成员,使用点 . 操作符。

struct_pointer.title

示例:

package main

import "fmt"

//结构体声明
type Person struct {
	name    string
	sex     string
	age     int
	id_card int
}

//定义结构体
func main() {

	//结构体类型的变量
	var (
		person1 Person
		person2 Person
	)
	//给person1赋值
	person1.name = "tom"
	person1.sex = "man"
	person1.age = 20
	person1.id_card = 56151165

	//给person2赋值
	person2.name = "tianqi"
	person2.sex = "nv"
	person2.age = 18
	person2.id_card = 88416516

	//使用函数传参结构体类型数据,传入地址值。
	personIofo(&person1)
	personIofo(&person2)

}

//函数定义结构体为形式参数进行传入。
func personIofo(p *Person) {
	fmt.Println("姓名:", p.name)
	fmt.Println("性别:", p.sex)
	fmt.Println("年龄:", p.age)
	fmt.Println("id:", p.id_card)
}

//运行结果为:
姓名: tom
性别: man
年龄: 20
id: 56151165
姓名: tianqi
性别: nv
年龄: 18
id: 88416516