引言
Title :标题Author : 作者Subject:学科ID:书籍ID
一、定义结构体

1. 语法格式

typestruct

结构体的格式如下

type struct_variable_type struct {
	member definition
	member definition
	...
	member definition
 }

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

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

2. 示例

package main

import "fmt"

type Persion struct {
	name    string
	sex     string
	age     int
	id_card int
}

func main() {
	//创建一个新的结构体
	fmt.Println(Persion{"zhangsan", "男", 20, 123412424})
	//使用key:value格式
	fmt.Println(Persion{name: "lisi", sex: "女", age: 18, id_card: 133654623})
	//忽略的字段为0或空
	fmt.Println(Persion{name: "wangwu", id_card: 21352365})
}


//输出结果
{zhangsan 男 20 123412424}
{lisi 女 18 133654623}
{wangwu  0 21352365}
二、访问结构体成员
.
结构体.成员名"
  • 结构体类型变量使用 struct 关键字定义,实例如下:
package main

import "fmt"

func main() {
	//结构体声明
	type Persion struct {
		name string
		age  int
		sex  string
		id   int
	}
	//结构体类型的变量
	var (
		Persion1 Persion //声明 Persion1 为 Persion 类型
		Persion2 Persion //声明 Persion2 为 Persion 类型
	)

	//给prison1赋值
	Persion1.name = "lisi"
	Persion1.sex = "man"
	Persion1.age = 30
	Persion1.id = 56341153

	//给prison2赋值
	Persion2.name = "wangwu"
	Persion2.sex = "woman"
	Persion2.age = 18
	Persion2.id = 78238232

	fmt.Println(Persion1)
	fmt.Println(Persion2)
}

//输出结果如下
{lisi 30 man 56341153}
{wangwu 18 woman 78238232}
三、结构体作为函数参数

结构体也可以作为参数传递给函数,可以解决一些代码的冗余问题,简化代码

  • 示例
package main

import "fmt"

//结构体声明
type Persion struct {
	name string
	age  int
	sex  string
	id   int
}

func main() {

	//结构体类型的变量
	var (
		Persion1 Persion //声明 Persion1 为 Persion 类型
		Persion2 Persion //声明 Persion2 为 Persion 类型
	)

	//给prison1赋值
	Persion1.name = "lisi"
	Persion1.sex = "man"
	Persion1.age = 30
	Persion1.id = 56341153

	//给prison2赋值
	Persion2.name = "wangwu"
	Persion2.sex = "woman"
	Persion2.age = 18
	Persion2.id = 78238232

	//使用函数传递结构体
	printInfo(Persion1)
	fmt.Println("------------------")
	printInfo(Persion2)
}

//函数定义结构体为形式参数,进行传入
func printInfo(p Persion) {
	fmt.Println("姓名: ", p.name)
	fmt.Println("年龄: ", p.age)
	fmt.Println("性别: ", p.sex)
	fmt.Println("身份证: ", p.id)
}

//输出结果如下
姓名:  lisi
年龄:  30
性别:  man
身份证:  56341153
------------------
姓名:  wangwu
年龄:  18
性别:  woman
身份证:  78238232
四、结构体指针

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

var struct_pointer *Persion
&
struct_pointer = &Persion1
.
struct_pointer.title
package main

import "fmt"

//结构体声明
type Persion struct {
	name string
	age  int
	sex  string
	id   int
}

func main() {

	//结构体类型的变量
	var (
		Persion1 Persion //声明 Persion1 为 Persion 类型
		Persion2 Persion //声明 Persion2 为 Persion 类型
	)

	//给prison1赋值
	Persion1.name = "lisi"
	Persion1.sex = "man"
	Persion1.age = 30
	Persion1.id = 56341153

	//给prison2赋值
	Persion2.name = "wangwu"
	Persion2.sex = "woman"
	Persion2.age = 18
	Persion2.id = 78238232

	//使用函数传递结构体的地址
	printInfo(&Persion1)
	fmt.Println("------------------")
	printInfo(&Persion2)
}

//定义结构体指针形参进行传入
func printInfo(p *Persion) {
	fmt.Println("姓名: ", p.name)
	fmt.Println("年龄: ", p.age)
	fmt.Println("性别: ", p.sex)
	fmt.Println("身份证: ", p.id)
}

//输出结果如下
姓名:  lisi
年龄:  30
性别:  man
身份证:  56341153
------------------
姓名:  wangwu
年龄:  18
性别:  woman
身份证:  78238232
总结

结构体是由相同类型和不同类型组成的数据集合,存储的结构类型是不受限制的