Appearance
结构体
结构体的应用场景和概念
当我们想要去存储一个学生的相关信息,基于目前所学的知识,我们可能会这样去写
go
var id int
var name string
var gender byte
var age int
var addr string
从上面的代码可以看出,当我们存储某个对象的相关信息的时候,属性非常多,定义非常多的变量相对来说比较麻烦,而且每个变量之间没有联系,这不利于维护,因为,学生这个对象是一个整体,我们有没有一种方式能把学生的所有信息统一管理起来呢?这就要用到我们这章的内容,结构体,下面我们使用结构体来定义学生对象
go
type Student struct{
id int
name string
gender byte
age int
addr string
}
通过结构体来定义的学生对象,能更方便的管理和维护对象的数据
概念:结构体是由一系列具有相同类型或不同类型的数据构成的数据集合,可以方便的管理一批有联系的数据,使用结构体可以提高程序的易读性
结构体的创建与初始化
语法
go
type 名字 struct {
成员名 数据类型
...
}
结构体初始化
go
type Student struct {
id int
name string
age int
address string
}
var s Student = Student{
id: 1,
name: "xiaoqiang",
age: 20,
address: "地球",
}
fmt.Println(s)
注意:初始化的时候,可以只给部分属性初始化赋值
可以单独给结构体成员赋值
go
type Student struct {
id int
name string
age int
address string
}
var s Student
s.id = 1
s.name = "zhangsan"
fmt.Println(s)
结构体与数组
go
package main
import "fmt"
type Student struct {
id int
name string
age int
address string
}
func main(){
var students [3]Student = [3]Student{
{id: 1, name: "张三", age: 20, address: "地球"},
{id: 2, name: "李四", age: 21, address: "地球"},
{id: 3, name: "王武", age: 22, address: "地球"},
}
for _, s := range students {
fmt.Println(s)
}
}
结构体切片
go
package main
import "fmt"
type Student struct {
id int
name string
age int
address string
}
func main(){
var students []Student = []Student{
{id: 1, name: "张三", age: 20, address: "地球"},
{id: 2, name: "李四", age: 21, address: "地球"},
{id: 3, name: "王武", age: 22, address: "地球"},
}
for _, s := range students {
fmt.Println(s)
}
// 追加数据
students = append(students, Student{id: 4, name: "赵六", age: 23, address: "地球"})
fmt.Println(students)
}
结构体 map
go
package main
import "fmt"
type Student struct {
id int
name string
age int
address string
}
func main(){
var students map[int]Student = map[int]Student{
0:{id: 1, name: "张三", age: 20, address: "地球"},
1:{id: 2, name: "李四", age: 21, address: "地球"},
2:{id: 3, name: "王武", age: 22, address: "地球"},
}
for i, s := range students {
fmt.Println(i,s)
}
}
结构体作为函数参数
go
package main
import "fmt"
type Student struct {
id int
name string
age int
address string
}
func main(){
var stu Student = Student{id: 1, name: "张三", age: 20, address: "地球"}
test(stu)
// 函数修改成员值后不会影响原来结构体的内容
fmt.Println(stu)
}
func test(s Student){
// 修改成员值
s.id = 200
}