结构体
现在有一个需求,要求存储学生的详细信息,例如,学生的学号,学生的姓名,年龄,家庭住址等。按照以前学习的存储方式,可以以如下的方式进行存储:
通过定义变量的信息,进行存储。但是这种方式,比较麻烦,并且不利于数据的管理。
在GO语言中,我们可以通过结构体来存储以上类型的数据,结构体的定义如下:
type
后面跟着的是结构体的名字Student
, struct
表示定义的是一个结构体。
大括号中是结构体的成员,注意在定义结构体成员时,不要加var
。通过以上的定义,大家能够感觉出,通过结构体来定义复杂的数据结构,非常清晰。
结构体定义完成后,可以进行初始化。
一、结构体初始
注意:顺序初始化,每个成员必须初始化,在初始化时,值的顺序与结构体成员的顺序保持一致。
结构体定义完成后,结构体成员的使用。
二、结构体比较与赋值
两个结构体可以使用 == 或 != 运算符进行比较,但不支持 > 或 <。
同类型的两个结构体变量可以相互赋值。
三、结构体数组
上一小节,我们已经对结构体的定义,与基本使用有一定的了解了,下面有一个需求:用结构体存储多个学生的信息。
可以使用上一小节讲解的,通过结构体定义多个结构体变量,也可以定义结构体数组来存储。
结构体数组定义如下所示:
上面的代码首先是定义了一个Student
的结构体,然后在main
方法里面用一个变量Students
接收了这个新建的[]Student
结构体数组,结构体是放一个Student
那么,结构体数组就可想而知了,是放多个结构体,然后循环遍历Students
的下标也就是有几个结构体就会遍历几次,最后再打印里面的sutdents
里面的name
,最后输出的结果"张三",“李四”,“王五”。
四、结构体作为函数参数
结构体也可以作为函数参数,进行传递,如下所示:
把结构体作为参数的话,参数类型就只能放相对应的结构体,不然会报错。
上面代码首先在Test
里面修改一下student
里面的id为666
,然后在main
里面新建一个为s的结构体,这个结构体和student
一样,所以Test
里面能放,放进去之后就会修改这个id
,最后打印的结果为:id:666,name:mike,sex:m,age:18,addr:bj
。
结构体作为函数参数进行传递,是值传递。