0
点赞
收藏
分享

微信扫一扫

Golang结构体创建与初始化、结构体与数组、结构体与切片、结构体与map、结构体作为函数参数

结构体:

结构体的创建与初始化:

创建格式:

type 结构体名 struct {
	成员名 数据类型
}

顺序初始化格式:

var 变量名 结构体名 = 结构体名{成员值1,成员值2}

部分初始化格式:

var 变量名 结构体名 = 结构体名{成员名:成员值,成员名:成员值}

通过结构体变量.成员方式初始化:

	var 变量名 结构体名
	变量名.成员名 = 成员值

演示:

	// 结构体可以创建在函数外面,这样是全局的,如果是定义在函数的里面就是局部的
type Student struct {
	// 成员名称不加var关键字
	id   int
	name string
	age  int
	addr string
}

func structDemo() {
	
	// 顺序初始化
	var s1 Student = Student{001, "itzhuzhu", 23, "广州"}

	// 部分初始化
	var s2 Student = Student{name: "itzhuzhu", age: 23}

	//通过结构体变量.成员方式初始化
	var stu Student
	stu.name = "itzhuzhu"
	stu.id = 23

	fmt.Println(s1)  //{1 itzhuzhu 2 广州}
	fmt.Println(s2)  //{0 itzhuzhu 23 }
	fmt.Println(stu) //{23 itzhuzhu 0 }
}

结构体与数组:

结构体数组定义:

 // 数组需要要指定长度
var 结构体数组名[索引] 结构体类型 = [索引] 结构体类型{}

数组修改结构体成员的值:

结构体数组名[索引].成员=

演示:

func structDemo02() {
	var arr [3]Student = [3]Student{
		Student{001, "itzhuzhu", 23, "广州"},
		Student{002, "itzhuzhu2", 23, "广州2"},
		Student{003, "itzhuzhu3", 23, "广州3"},
	}
	fmt.Println(arr)                     //[{1 itzhuzhu 23 广州} {2 itzhuzhu2 23 广州2} {3 itzhuzhu3 23 广州3}]
	fmt.Println(arr[0])                  //{1 itzhuzhu 23 广州}
	fmt.Println(arr[0].name, arr[0].age) //itzhuzhu 23

	//结构体数组名[索引].成员=值
	arr[0].addr = "深圳"
	fmt.Println("成员值修改后", arr[0]) //{1 itzhuzhu 23 深圳}

	// 通过循环输出结构体数组中的内容
	for i := 0; i < len(arr); i++ {
		fmt.Println("通过循环输出结构体数组全部的内容:", arr[i])
		fmt.Println("通过循环输出结构体数组指定的内容:", arr[i].id)
	}

	for key, value := range arr {
		fmt.Println("key:", key)
		fmt.Println("value:", value)
		fmt.Println("打印指定内容:", value.age)
	}
}

结构体与切片:

结构体切片定义:

var 结构体数组名[] 结构体类型 = [] 结构体类型{}

切片修改结构体成员的值:

结构体切片名[索引].成员=

演示:

func structDemo03() {
	var arr []Student = []Student{
		Student{001, "itzhuzhu", 23, "广州"},
		Student{002, "itzhuzhu2", 23, "广州2"},
		Student{003, "itzhuzhu3", 23, "广州3"},
	}

	fmt.Println(arr)                     //[{1 itzhuzhu 23 广州} {2 itzhuzhu2 23 广州2} {3 itzhuzhu3 23 广州3}]
	fmt.Println(arr[0])                  //{1 itzhuzhu 23 广州}
	fmt.Println(arr[0].name, arr[0].age) //itzhuzhu 23

	//结构体数组名[索引].成员=值
	arr[0].addr = "深圳"
	fmt.Println("成员值修改后", arr[0]) //{1 itzhuzhu 23 深圳}

	// 通过循环输出结构体数组中的内容
	for i := 0; i < len(arr); i++ {
		fmt.Println("通过循环输出结构体切片全部的内容:", arr[i])
		fmt.Println("通过循环输出结构体切片指定的内容:", arr[i].id)
	}

	for key, value := range arr {
		fmt.Println("key:", key)
		fmt.Println("value:", value)
		fmt.Println("打印指定内容:", value.age)
	}

	// 追加数据
	arr = append(arr, Student{004, "itzhuzhu4", 23, "佛山"})
	fmt.Println(arr)
}

结构体与map:

结构体map的定义:

make(map[key的类型]value的类型)

演示:

func structDemo04() {
	m := make(map[int]Student)
	m[0] = Student{001, "itzhuzhu", 23, "广州"}
	m[1] = Student{002, "itzhuzhu2", 23, "广州"}
	m[2] = Student{003, "itzhuzhu3", 23, "广州"}
	fmt.Println("全部数据:", m)
	fmt.Println("指定索引数据:", m[0])
	fmt.Println("指定索引成员数据:", m[0].name)

	delete(m, 0)
	for key, value := range m {
		fmt.Println("key:", key)
		fmt.Println("value:", value)
		fmt.Println("value.name:", value.name)
		fmt.Println("value.name:", value.name)
	}
}

结构体作为函数参数:

创建格式:

func 函数名(结构体){
	函数体
}

调用格式:

函数名(结构体)

演示:

func main() {
	stu := Student{001, "itzhuzhu", 23, "广州"}
	structDemo05(stu)
	fmt.Println(stu)
}

func structDemo05(stu Student) {
	// 修改结构体的成员,不会影响到原结构体
	stu.id = 999
	fmt.Println(stu)
}

求最大学生年龄:

演示:

func main() {
	stu := make([]Student, 3)
	structDemo06(stu)
}


func structDemo06(stu []Student) {
	//定义年龄最大的变量
	max := stu[0].age

	//定义年龄最大的学生索引
	var maxIndex int

	for i := 0; i < len(stu); i++ {
		fmt.Printf("请输入第%d个学生的详细信息\n", i+1)
		//切片是Student的类型,Student中有多个成员,所以要把里面的每个成员都赋值
		fmt.Scan(&stu[i].id, &stu[i].name, &stu[i].age, &stu[i].addr)

		// 如果大于最大年龄就重新赋值,然后把最大年龄的学生索引给定义的变量赋值
		if stu[i].age > max {
			max = stu[i].age
			maxIndex = i
		}
	}
	fmt.Println(stu[maxIndex])
}
举报

相关推荐

0 条评论