golang基础复合类型—结构体

一、结构体简介

1.应用场景

存储学生的详细信息,例如学生的学号,学生的姓名,年龄,家庭住址等。

通过定义变量存储?比较麻烦,并且不利于数据的管理。

2.结构体概念

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

type Student struct {
    id int
    name string
    sex byte
    age int
    addr string
}

结构体可以很好的管理一批有联系的数据,得用结构体可以提高程序的易读性。

二、结构体的创建与初始化

1.结构体的创建

type 结构体名 struct{

        成员名  数据类型

}

type Student struct {
    id int
    name string
    sex byte
    age int
    addr string
}
//注意不能在成员名称前加 var

2.初始化

  • 顺序初始化
package main

import "fmt"

type Student struct {
	id int
	name string
	sex byte
	age int
	addr string
}
func main()  {
	var s Student = Student{101,"Bob",'1',18,"Sichuan"}
	fmt.Println(s)
}

输出:

{101 Bob 49 18 Sichuan} 

  • 指定成员初始化
package main

import "fmt"

type Student struct {
	id int
	name string
	sex byte
	age int
	addr string
}
func main()  {
	var s Student = Student{id: 101,name: "Bob",age: 18}
	fmt.Println(s)
}

输出:

{101 Bob 0 18 }

//sex 的类型默认是0,addr的默认值是空 

  • 通过“结构体变量.成员”完成初始化
package main

import "fmt"

type Student struct {
	id int
	name string
	sex byte
	age int
	addr string
}
func main()  {
	var s Student
	s.id = 101
	s.sex = 0
	s.name = "Bob"
	fmt.Println(s)
}

输出:

{101 Bob 0 0 }

//age的类型默认为0,所有此处两个0

三、结构体与数组

1.结构体数组的定义

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var students [3]Student = [3]Student{
		{101,"Mike"},
		{102,"Bob"},
		{103,"Rita"},
	}
	fmt.Println(students)
	fmt.Println(students[1])
    fmt.Println(students[1].id)
}

输出:

[{101 Mike} {102 Bob} {103 Rita}]
{102 Bob}
102

2.修改结构体成员的值

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var students [3]Student = [3]Student{
		{101,"Mike"},
		{102,"Bob"},
		{103,"Rita"},
	}
	fmt.Println(students)
	fmt.Println(students[1])
	fmt.Println(students[1].id)
	students[1].name = "Rename"
	fmt.Println(students)
	fmt.Println(students[1].name)

}

输出:

[{101 Mike} {102 Bob} {103 Rita}]
{102 Bob}
102
[{101 Mike} {102 Rename} {103 Rita}]
Rename
 

3.循环遍历

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var students [3]Student = [3]Student{
		{101,"Mike"},
		{102,"Bob"},
		{103,"Rita"},
	}
	for _,v := range students{
		fmt.Println(v)
		fmt.Println(v.name)
	}

}

输出:

{101 Mike}
Mike
{102 Bob}
Bob
{103 Rita}
Rita

四、结构体与切片

1.结构体切片的定义

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var s[]Student = []Student{
		{101,"Bob"},
		{102,"Rita"},
	}
	fmt.Println(s)
	fmt.Println(s[0])
	fmt.Println(s[0].name)
}

输出:

[{101 Bob} {102 Rita}]
{101 Bob}
Bob

2.修改结构体成员的值

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var s[]Student = []Student{
		{101,"Bob"},
		{102,"Rita"},
	}
	fmt.Println(s[0].name)
	s[0].name = "rename"
	fmt.Println(s[0].name)
}

输出:

Bob
rename 

3.循环遍历

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var s[]Student = []Student{
		{101,"Bob"},
		{102,"Rita"},
	}
	for _,v := range s {
		fmt.Println(v.name)
	}
}

 输出:

Bob
Rita

4.append函数使用

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	var s[]Student = []Student{
		{101,"Bob"},
		{102,"Rita"},
	}
	s = append(s,Student{103,"Mike"})
	fmt.Println(s)
}

输出:

[{101 Bob} {102 Rita} {103 Mike}]

五、结构体与map

1.结构体map定义与初始化

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	m := make(map[int]Student)
	m[1] = Student{101,"Mike"}
	m[2] = Student{102,"Rita"}
	fmt.Println(m)
}

输出:

map[1:{101 Mike} 2:{102 Rita}]

2.循环遍历

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	m := make(map[int]Student)
	m[1] = Student{101,"Mike"}
	m[2] = Student{102,"Rita"}
	for key,value := range m{
		fmt.Println(key," ",value)
	}
}

输出结果:

1   {101 Mike}
2   {102 Rita} 

3.删除map中的值

package main

import "fmt"

type Student struct {
	id int
	name string

}
func main()  {
	m := make(map[int]Student)
	m[1] = Student{101,"Mike"}
	m[2] = Student{102,"Rita"}
	fmt.Println(m)
	delete(m,1)
	fmt.Println(m)
}

输出:

map[1:{101 Mike} 2:{102 Rita}]
map[2:{102 Rita}]

六、结构体作为函数参数

初始化学生信息

package main

import "fmt"

type Student struct {
	id int
	name string
}
func main()  {
	stu := make([]Student,3)
	initData(stu)
	fmt.Println(stu)
}
func initData(stu []Student)  {
	for i:=0;i<len(stu);i++{
		fmt.Println("请输入第",i+1,"个学生的信息:")
		fmt.Scan(&stu[i].id,&stu[i].name)
	}
}

输出:

请输入第 1 个学生的信息:
101 bob
请输入第 2 个学生的信息:
102 alicy
请输入第 3 个学生的信息:
103 rita
[{101 bob} {102 alicy} {103 rita}]

猜你喜欢

转载自blog.csdn.net/weixin_41551445/article/details/126304167