结构体定义和使用
#pargram mark 结构体定义
结构体的赋值和比较
type Stud struct { name string age int sex string }
结构体切片
type Student struct{ name string age int } //var slice []结构体数据类型 //var slice []Student=make([]Student,5) //slice[0] = Student{"刘备", 50, "男", 60, "巴蜀"} var slice []Student slice = append(slice, Student{"刘备", 50}, Student{"孙尚香", 20, "女"}, Student{"甄宓", 28, "女"}) //在内存中存储两个相同内容 独立内存地址的数据 //修改一个不影响另外一个 s := make([]Student, 3) copy(s, slice)
结构体作为map的值
m:=make(map[int]Student) //赋值 m[1001] = Student{"a",20} m[1002] = Student{"b",30} m[1003] = Student{"c",20} m[1004] = Student{"f",18} //注意:将结构体作为map的value时 在修改数据时 必须整体修改 m[1003] = Student{"修改",17} //可以获取 ,不能修改 fmt.Println(m[1001].name) //遍历map中的数据 for k,v:=range m { fmt.Println(k,v) } delete(m,1003) delete(m,1001) fmt.Println(m) /************** 结构体map值为切片 **********/ m:=make(map[int][]Student) m[1001] = []Student{ {"A",20}, {"B",18}, } m[1002] = []Student{ {"C",17}, {"F",20}, } fmt.Println(m)
结构体嵌套结构体
type Person struct { name string age int sex string //结构体不能嵌套本结构体 在创建结构体时 无法预知内存大小 (不要相互引用 A引用A,或是A引用B,B引用A) //Person//err } //结构体嵌套写法1 type Teacher1 struct{ p Person subject string worktime int } //结构体嵌套写法2 type Teacher2 struct{ //如果结构体嵌套结构体 通过匿名字段使用结构体 Person //匿名字段 subject string worktime int } //结构体初始化 var tea Teacher1 = Teacher1{Person{"法师", 32, "男"}, "go语言开发", 10} //修改成员变量 tea.p.name = "大帅哥" fmt.Println(tea.p.name) //结构体初始化 var tea Teacher2 = Teacher2{Person{"法师 ", 32, "男"}, "go语言开发", 10} //修改数据 tea.name = "大帅哥" fmt.Println(tea.name)
结构体作为函数参数
/******************** 值传递 形参不能修改实参的值 ********************/ //结构体变量作为函数参数 func test (s students){ fmt.Println(s) } //结构体数组作为函数参数 func test1(arr [3]int){ fmt.Println(arr) } //结构体数组作为函数参数是值传递 形参不能修改实参的值 arr:=[3]Student{"法师",32,男"},{"玉姐",18,"女"},{"丁丁",26,"男"}} test1(arr) /******************** 地址传递(引用传递) 形参可以修改实参的值 map,slice ********************/ //结构体切片作为函数参数 func test2(slice []Students) { fmt.Printf("%p\n", slice) slice[0].name = "大帅哥" } //结构体map作为函数参数 func test3(m map[int]Students) { //修改 //m[1001]=Students{"大帅哥",32,"男"} //删除 //delete(m,1001) //添加数据 m[1111]=Students{"大光头",40,"男"} } slice := [] Student{{"法师", 32, "男"}, {"玉姐", 18, "女"}, {"丁丁", 26, "男"}} test2(slice) m := map[int] Student{1001: {"法师", 32, "男"}, 1003: {"玉姐", 18, "女"}, 1008: {"丁丁", 26, "男"}} test3(m)
指针
指针: 指针是一种数据类型,存储的是变量地址 指针类型定义: var 指针变量名 指针类型 = &变量 可以通过指针间接修改变量的值 *指针变量 = 值 *取值运算符 &取地址运算符
new创建空间
``` //声明指针 默认值为nil nil是一个内存地址编号为0的空间 var p *int
//创建内存空间 赋值给质变量 //new(数据类型) p = new(int) *p=123 ```
|