这是我参与「第五届青训营 」伴学笔记创作活动的第4天
其他数据类型
指针
- 一个指针对应一个变量的内存地址,我们可以通过指针来访问或更新一个变量的值。若变量是由表达式临时创建的,那么表达式也能接受取地址的操作,比如在函数中返回局部变量地址的行为是被允许的,该变量在函数执行完之后依然有效
- 间接引用:通过指针访问变量的值
- 重定向:通过指针修改变量的值
- 指针的零值为nil
结构体
结构体就是一组字段
- 结构体的字段通过点号访问
- 当一个指针指向结构体时,可以通过(*p).element来访问结构体中的内容,也可以直接使用
p.element来隐式间接引用
结构体的定义
type 结构体名 struct {
字段1 字段类型,
字段2 字段类型
}
结构体的创建
-
v := 结构体名{对应字段的值}
-
v := 结构体名{字段:值}
- 没有列出来的字段将会被赋值为0
数组
数组的创建
var a [10]int
- a为一个长度为10的int类型的数组,数组的长度不可改变
- 可通过索引来给数组赋值
- 也可在数组后加{}直接初始化数组
切片
切片的大小是可变的数组
切片的创建
s []int := a[low : high]
- 切片会选择一个半开区间,包括low元素,不包括high元素
- 切片实际上是对数组中一段数据的引用,修改切片当中的元素将会直接修改其底层数组中对应的数据
切片文法
s := []int{1,2,3}
这会先创建一个数组,然后构建引用其的切片
切片的默认行为
[:] 切片默认的下界是0,上届是数组的长度
切片的长度和容量
长度:切片所包含的元素个数 len(s)
容量:切片包含的第一个元素到底层数组末尾元素的个数 cap(s)
nil切片
切片的零值为nil,nil切片的长度和容量为0且没有底层数组
创建动态数组
a := make([]int ,len, cap)
make会分配一个元素为零值的数组并返回一个引用了他的切片
切片的切片
切片可包含任何类型,其类型也可以是切片,也就是说,切片里存放的还是切片,类似于C语言中的二维数组
追加
append(s,1)
利用append函数向切片追加新的元素,当底层数组大小不够时,会分配一个更大的数组,切片指向新分配的数组
遍历
使用for和range遍历切片或映射
使用range遍历切片会返回元素的下标和元素
for _,j := range s{
fmt.Printf(j)
}
- _来代替不需要的值,若只想获得索引,不写第二个变量即可
映射
映射的零值为nil,nil映射没有键,也不能添加键
创建映射
var m = map[键类型]值类型
可以直接为其添加键和值
修改映射
- 向映射中添加键值对或者修改键对应的值
m[key] = val
- 删除映射中的键值对
delete(m,key)
- 获取值
val = m[key]
- 检查键值对是否存在
val,ok = m[key] 第一个参数是值,第二个元素是布尔值,若存在键值对则返回true,反之则为false,值为对应类型的零值