更新系列
Go语言头秃之路(零)
Go语言头秃之路(一)
Go语言头秃之路(二)
Go语言头秃之路(四)
Go语言头秃之路(五)
Go语言头秃之路(六)
Go语言头秃之路(七)
- 数组
定义语法:var 数组名 [数组长度]数据类型
定义时赋值:var 数组名 [数组长度]数据类型{元素1,元素2…}
数组长度是数据类型的一部分,没有指定长度是切片类型,不同长度的数组为不同的数据类型。
数组地址指向第一个元素地址,各元素地址间隔依据数组的类型决定(int64 -> 8, int32 -> 4)
遍历数组:
for i, v := range 数组名 {}
数组属于值类型,默认情况下是值传递,因此会进行值拷贝。对于有大量元素的数组,建议传递地址操作。func testArr(arr *[3]int) { (*arr)[0] = 100 fmt.Println(*arr) } // ... main var intArr = [3]int {1,2,3} fmt.Println(intArr) testArr(&intArr) fmt.Println(intArr) - 二维数组
定义:var 数组名 [元素大小][元素数组大小]数据类型
两种定义赋值饭粒:arr2 := [2][2]int{{1,2}, {3,4}} arr2 := [...][2]int{{1,2}, {3,4}}
-
切片
用于保存个数不确定的数据。
切片是引用类型,使用引用传递机制。
切片的长度是可以变化的(可看做是动态变化的数组),切片使用和数组类似;
len(slice)计算切片长度,cap(slice)计算切片容量。
slice 存储的数据有仨:第一个数据地址、切片长度len、切片容量cap
slice 就是一个数据结构(struct结构体)- 切片创建:
- var 切片名 []type = make([], len, [cap])
cap>=len - var 切片名 = 数组[startIndex:endIndex]
- 切片名 := []type {data1, data2…}
- 切片遍历:
for i:=0;i<len(slice);i++ { slice[i] } for i,v = range slice { }- 切片追加元素
// 追加多个元素 slice = append(slice, 100, 200, 300) // 固定写法 切片名... slice = append(slice, slice...)- 切片拷贝
copy(slice1, slice2)
将slice2拷贝给slice1
两个切片是独立空间,修改任意切片元素值不会影响另一个切片中的值.
当长度大的切片拷贝给长度小的切片时不报错,有多长就拷多长。
string底层是byte数组,因此string也可以进行切片处理。
如果需要修改字符串,需要先将string转换为byte类型或者rune类型数组,修改数组对应元素后转换回string即可。
注意:byte不可以处理中文,rune可以.
str := "hello0owa5world" arr1 := []rune(str) arr1[0] = '液' str = string(arr1) fmt.Println("str=", str)
-
map
key-value无序数据结构(python中的字典)
key通常为int/string,key不能重复,插入相同key数据时只保存后者
声明:var map变量名 map[keyType]valueType
声明以后不会分配内存,需要先make(map[keyType]valueType, size)分配数据空间
make:初始分配的创建取决于size,但产生的映射长度为0。size可以省略,这种情况下就会分配一个
小的起始大小。
map是引用类型,使用引用传递。
不存在新增/已存在的修改:map变量名[key名] = value值
删除:delete(map变量名, key名)
一次性删除map所有key:直接make一个新空间给到map变量名
查找:value, isExist := map变量名[key名]map遍历只能用for…range
计算map长度同样可以使用len()m := make(map[string]map[string]string) m["stu01"] = make(map[string]string) // 增 m["stu01"]["city"] = "sz" m["stu01"]["name"] = "Fone" m["stu01"]["company"] = "yjs" // 改 m["stu01"]["company"] = "??" // 删 delete(m["stu01"], "company") fmt.Println(m["stu01"]) // 查 val, ok := m["stu01"]["company"] if ok { fmt.Println(val) } else { fmt.Println("tan90°") } // 清空map m = make(map[string]map[string]string) fmt.Println(m) -
map切片
用于存放任意数量map
注意:map切片声明时长度必须指明,后面直接使用append添加map即可。monster := make([]map[string]string, 1) if monster[0] == nil { monster[0] = make(map[string]string) monster[0]["name"] = "金角大王" monster[0]["age"] = "1000" monster[0]["add"] = "狮子岭" } newMonster := make(map[string]string) newMonster["name"] = "银角大王" newMonster["age"] = "900" newMonster["add"] = "狮子岭" monster = append(monster, newMonster) fmt.Println(monster)
1552

被折叠的 条评论
为什么被折叠?



