-
数组
1.数组的长度需要声明 2.存储的数据类型必须一致 3.可以通过下标来访问,超出长度问报访问越界的错误 4.不支持负数索引 5.数组是值类型,传递的都是拷贝,不会对原来的对象进行修改 6.Go中不存在深拷贝和浅拷贝,都是值传递
- 初始化数组
a1 := [3] {"mkl", "klm", "lkm"} a2 := [...] {"mkl", "klm", "lkm"}
- 多维数组初始化
// 内部的数组元素不可以使用...来声明数量 // 另起一行花括号需要加逗号 不换行可以不加 a := [...][2] string { {"a", "b"}, {"a", "b"}, {"a", "b"}, }
- 初始化数组
-
切片
1.基于数组,自动扩容,更换数组 2.结构包含:地址、长度、容量 3.切片不支持直接比较,只能和nil进行比较 4.cap()获取容量(底层数组能存储的容量),len()获取长度 理解方式:切片代表一个公司,数组代表办公地点,公司人员扩充,办公地点更变, 换一个工作多的办公地点。扩容必定换了内存地址。 5.字符串也支持切片表达式 6.*对切片再进行切片,切片的上限为容量,而不是长度 7.完整切片表达式[low:high:max] 8.make函数初始化,一旦申请内存空间,就不等于nil,最好一次性将内存申请到位,避免运行时扩充消耗 9.判断切片是否为空 len(s) == 0 而不是与nil比较,nil切片没有底层数组
-
初始化切片
var s1 []int // 切片声明 s2 := [5]int {1,2,3,4,5} s3 := s2[1:3] // 切片表达式,基于数组s2按索引去取,左包含,右不包含
切片再切片
a := [3]int{1, 2, 3} b := a[0:2] c := b[1:3] fmt.Println(a) fmt.Println(b) fmt.Println(c) // [1 2 3] // [1 2] // [2 3] // 修改底层数组 a[1] = 100 fmt.Println(a) fmt.Println(b) fmt.Println(c) // [1 100 3] // [1 100] // [100 3]
切片完整表达式
// 默认切片的容量是切片的开始索引到数组的最后 // 0 <= low < high <= max // max 指的是high能取到的最大值 影响切片的容量 // 最终切片的容量是max-low a := []int {1,2,3,4,5} s1 := a[1:2:3] fmt.Println(s1, len(s1), cap(s1))
make()初始化 申请内存空间
// 容量可以省略 a := make([]int, 2, 10) // make([]T, size, cap)
字面量初始化
s := []int{1,2,3}
-
切片的拷贝
a := []int {1,2,3} b := make([]int, len(a)) copy(b, a) // 将切片a中的值拷贝到切片b中,必须声明b的长度,不然无法装载被拷贝对象a的元素
-
切片的遍历与append
// 索引遍历 s := []int {1,2,3,4} for i:= 0; i< len(s); i++ { fmt.Println(i) } // range遍历 for i, v := range(s) [ fmt.Println(i) ]
append()添加元素
// append() 必须接受返回值 // append()函数可能触发切片的扩容,如果不接收返回值,那么操作之后的切片对象还是原来的切片地址 // 添加单个元素 s := []string s := append(s, "d") // 添加一个切片中所有元素 s1 := []string{"a", "b"} s2 := append(s, s1...)
-
切片删除元素
// 通过切片拼接的方式,实现根据下标删除元素的的效果 var s = []int {1,2,3} s = append(s[:1], s[2:]...)
-
-
map
无序的key,value结构
- 初始化map
m := make(map[string]int, 10) // 可以声明容量,减少动态扩容 // 字面量初始化 m := map[string]string{ "username": "mkl" "password": "123" }
- 取值
v, ok := m["username"]
- 遍历
for k, v := range m { Println(k, v) }
- 删除
delete() 删除键值对,没有返回值
delete(m, "username")
- 初始化map
记录自己的学习历程!