Golang结构体的学习
结构体概念
应用场景:存储人员的详细信息,例如编号、姓名、性别等
概念:由一些列具有相同类型或不同类型的数据构成的数据集合,方便管理数据,提高程序易读性
结构体的创建与初始化
func main(){
//创建
type Student struct{
id int//不可以加var,此时是成员,而不是变量
name string
age int
addr string
}
//顺序初始化
var s Student = Student{101,"张三",18,"北京"}
fmt.Println(s)
//部分成员初始化
var s1 Student = Student{name:"李四",age:18}
//通过”结构体变量.成员“初始化
var stu Student
stu.id = 102
stu.name = "老王"
stu.age = 28
stu.addr = "北京"
}
结构体与数组
//结构体数组定义
type Student struct{//全局结构体
id int
name string
age int
addr string
}
func main(){
var arr[3]Student = [3]Student{
Student{101,"张三",18,"北京"},
Student{102,"李四",18,"北京"},
Student{103,"王五",18,"北京"},
}//类型是结构体
fmt.Println(arr)
fmt.Println(arr[0])
fmt.Println(arr[0].age)//输出第一项某个成员
//成员值修改
arr[0].age = 20//覆盖张三年龄
//通过循环输出结构体数组中的内容
for i:=0;i<len(arr);i++{
fmt.Println(arr[i].age)//打印所以学生的年龄
}
for k,v := range arr{
fmt.Println(k)
fmt.Println(v.age)
}
}
结构体与切片
//结构体切片定义
type Student struct{//全局结构体
id int
name string
age int
addr string
}
func main(){
var s[]Student = []Student{
Student{101,"张三",18,"北京"},
Student{102,"李四",18,"北京"},
}//类型是结构体
fmt.Println(s)
fmt.Println(s[0])
fmt.Println(s[0].age)//输出第一项某个成员
//成员值修改
s[0].age = 20//覆盖张三年龄
//通过循环输出结构体切片中的内容
for i:=0;i<len(s);i++{
fmt.Println(s[i].name)//打印所以学生的姓名
}
for k,v := range s{
fmt.Println(k)
fmt.Println(v.id)
}
//append函数使用
append(s,Student{103,"王五",20,"北京"})
}
结构体与map
//结构体map定义
type Student struct{//全局结构体
id int
name string
age int
addr string
}
func main(){
m := make(map[int]Student)
m[1] = Student{101,"张三",18,"北京"}
m[2] = Student{102,"李四",18,"北京"}
fmt.Println(m)
fmt.Println(m[1])//取第一个数据
fmt.Println(m[1].name)//打印成员
//通过循环输出结构体数组中的内容
for key,value := range m{
fmt.Println(key)
fmt.Println(value.age)
}
//成员值修改
arr[0].age = 20//覆盖张三年龄
//通过循环输出结构体数组中的内容
for i:=0;i<len(arr);i++{
fmt.Println(arr[i].age)//打印所以学生的年龄
}
//delete函数
delete(m,2)//删除第二个学生
}
结构体作为函数参数
type Student struct{//全局结构体
id int
name string
age int
addr string
}
func main(){
stu := Student{101,"张三",18,"北京"}
PrintDemo(stu)
}
func PrintDemo(stu Student){
fmt.Println(stu)
}
//案例 输出年龄最大的详细信息
type Student struct{//全局结构体
id int
name string
age int
addr string
}
func main(){
//1.输入学生信息
stu := make([]Student,3)//切片
InitData(stu)
GetMax(stu)
}
func InitData(stu []Student){
for i:=0;i<len(stu);i++{
fmt.Printf("请输入第%d个学生的详细信息\n",i+1)
fmt.Scan(&stu[i].id,&stu[i].name,&stu[i].age,&stu[i].addr)
}
}
func GetMax(stu []Student){
var max int =stu[0].age
var maxIndex int//记录最大年龄学生信息在整个切片中的下标
for i:=0;i<len(stu);i++{
if stu[i].age > max{
max = stu[i].age
maxIndex = i
}
}
fmt.println(stu[maxIndex])
}
注:在函数中修改结构体中的值,原结构体中的值不会发生改变