一、结构体简介
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}]