Go学习笔记
目录
Go语言基础
数组Array
数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。
数组的定义:
var 数组变量名 [元素数量]类型
(如: var a [3]int )数组的长度必须是常量, 并且长度是数组类型的一部分。一旦定义, 长度不能变。
数组可以通过索引进行访问,但是不能超过数组元素最大索引,否则会引发
panic
数组定义
|
|
数组初始化
|
|
数组遍历
- 数组遍历可使用 for 循环与 for range 循环进行遍历
|
|
多维数组
- 多维数组既,数组中嵌套数组
- 多维数组只有最外层数组可以使用[…]动态配置数组长度
- 数组是值类型, 赋值和传参会复制整个数组. 因此改变副本的值, 不会改变本身的值。
|
|
数组练习题
|
|
切片Slice
切片 (Slice) 是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。
切片 (slice) 是一个
引用类型
, 它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。切片 (slice) 定义了以后, 必须初始化才能使用。
切片 (slice) 不能直接进行比较, 切片只能和
nil
进行比较.nil
的切片元素个数与容量都为 0。
切片定义
var 变量名 []元素类型
.
|
|
切片本质
- 切片的本质就是对底层数组的封装, 它包含了三个信息: 底层数组的指针、切片的长度(len)和切片的容量(cap)。
|
|
切片比较
|
|
切片的赋值
- 切片是 引用类型
|
|
切片的遍历
- 切片的遍历方式和数组是一致的, 支持索引
for
遍历和for range
遍历。
|
|
append()
- Go语言的内建函数
append()
可以为切片动态添加元素。 每个切片会指向一个底层数组, 这个数组能容纳一定数量的元素。当底层数组不能容纳新增的元素时, 切片就会自动按照一定的策略进行"扩容”, 此时该切片指向的底层数组就会更换。“扩容"操作往往发生在append()
函数调用时.
|
|
切片扩容策略
- 切片容量长度小于1024时, 每次扩容的新容量就是旧容量的2倍。
- 如果新扩容的容量大于旧容量的2倍, 那么旧容量就等于新扩容的容量。
- 如果切片容量长度大于1024时,扩容的新容量是旧容量的1/4, 直到最终容量大于等于新申请的容量。
- 另外不同类型的切片, 扩容的策略也不相同。
copy()
由于切片是
引用类型
, 所以切片(a = b) 实际指向的是同一个内存地址,修改切片b的元素时,a切片也会修改。Go语言内建的
copy()
函数可以迅速地将一个切片的数据复制到另外一个切片空间中。copy()
用法copy(目标切片, 原切片)
。
|
|
切片练习题
|
|
Map
Go语言中提供的映射关系容器为
map
, 其内部使用散列表(hash)
实现。map
是一种无序的基于key-value
的数据结构, Go语言中的map
是引用类型, 必须初始化才能使用。map
类型的变量默认初始值为nil
,需要使用make()
函数来分配内存。
map定义
map[KeyType]ValueType
(KeyType:表示键的类型, ValueType:表示键对应的值的类型) 如: map[string]int
|
|
- 输出:
|
|
map 初始化
make(map[KeyType]ValueType, [cap])
如: make(map[string]int,10) , 其中cap
表示map
的容量, 该参数虽然不是必须的, 但是我们应该在初始化map
的时候就为其指定一个合适的容量。
|
|
- 输出:
|
|
判断map键值对是否存在
- 使用
value
,ok
的方式进行判断。
|
|
- 输出:
|
|
map 的遍历
- 使用
for range
循环遍历 map
|
|
- 输出:
|
|
delete() 函数
map
可使用delete()
内建函数 删除一组键值对,delete()
函数。- 格式:
delete(map, map的key)
|
|
- 输出:
|
|
按照指定顺序遍历 map
- 将
map
中的 key 值存到切片中,利用 sort 对切片进行排序.然后利用 map[排序后的key] 对map
进行排序.
|
|
切片与map结合
- 元素类型 为
map
的切片,s1 = make([]map[string]int, 0, 5)
。
|
|
- 输出:
|
|
- 元素值为切片的
map
如:m8 := make(map[string][]int, 8)
|
|
- 输出:
|
|
Map练习题
- 统计一个字符串中每个单词出现的次数。比如: “how do you do” 中how=1 do=2 you=1。
|
|
- 输出:
|
|