重温Go语法笔记 | 容器
作者:互联网
- 容器
-
数组的声明
// 初始化声明 q := [...]int{1,2,3} // 仅声明 var a [3]int
-
切片
切片的概念
对数组连续片段的引用// 根据数组生成切片 var a = [3] int {1,2,3} fmt.Println(a[1:2]) // 初始化声明切片 a := []int{1,2,3} // 直接声明一个新的切片 var strList [] string // 使用make函数构造切片 b make([]int, 2, 10)
-
append 为切片添加元素
切片动态添加元素
var number [] int number = number.append(number, 1)
-
切片拷贝
copy(destList, cList) // 将当前列表所有元素,拷贝到目标列表中
-
切片删除
// 通过下标的方式 a := []int {1,2,3} a = a[1:] // 删除开头一个元素 // 通过append()方式 a = append(a[:0], a[1:]...) // 将第一个元素后的所有元素append到新的切片中 // 通过copy()方式 a = a[:copy(a, a[1:])]
-
切片的遍历
for index, value := range slice { fmt.Println(index) fmt.Println(value) }
-
-
map
即使map会动态伸缩,但是最好表明
-
map的声明
m := make(map[string] int, 10) n := make(map[string] []int) // 切片为map的值 n := make(map[string] *[]int)
-
map的遍历
for k, v in range m { fmt.Println(k, v) }
-
map元素的删除和清空
delete()函数
m := make(map[string]int) m["name"] = "mkl" delete(m. "name")
Go没有提供清空所有元素的函数,唯一的方法就是重新make一个map
-
-
sync.map
通常并发需要加锁,go提供了高效的sync.Map提供效率高并发安全的数据结构
1.无须初始化,直接声明 2.与map操作方式不同,使用Store存储,Load获取,Delete删除 3.遍历需要Range配合回调函数来迭代
func main() { var m sync.Map m.Store("name", "mkl") // 存 fmt.Println(m.Load("name")) // 取 m.Delete("name") // 删除 m.Range(func(k, v interface{}) bool { fmt.Println(k, v) return true // 返回false终止迭代 }) }
-
列表 list (双向链表)
实现高效的插入和删除
- 初始化list
m := list.New() // 方式一 var m list.List // 方式二
- 在列表中插入元素
m := list.New() m.pushBack("end") m.pushFront(100) // InsertAfter() // InsertBefore() // PushBackList() // PushFrontList()
- 从列表中删除元素
元素在插入时会返回 *list.Element指针
element := m.pushBack("end") m.Remove(element)
- 遍历列表
for i:= m.Front(); i != nil; i = i.Next() { // Front表示厨师赋值 fmt.Println(i.Value) }
- 初始化list
-
Go中的nil 空值/零值
布尔零值为false,数值零值为0,字符串零值"",指针、切片、映射、通道、函数和接口零值为nil
- nil标识符不能比较
- nil不是关键字或保留字
- nil没有默认类型
- 不同类型的nil指针是一样的
- 不同类型nil值占用的内存大小可能是不一样的
unsafe.Sizeof(m)
-
标签:切片,nil,map,int,fmt,重温,语法,Println,Go 来源: https://www.cnblogs.com/miaokela/p/16683272.html