切片
1、切片定义
a) 声明一个切片
var slice []int
var slice = []int{1, 2, 3}
var slice []int = []int{1, 2, 3}
b) 通过make来创建切片
var slice = make([]int, 10)
c) 通过 := 语法来定义切片
slice := []int{}
slice := make([]int, 10)
slice := make([]int, 10, 10)
d) 通过操作数组来创建切片
var array = [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
var slice []int = array[2:8]
e) 通过两个冒号创建切片,slice[x:y:z]切片实体[x:y],切片长度len = y-x,切片容量cap = z-x
slice := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
slice := slice[2:6:8]
2、切片操作
a) 使用append函数在slice尾部添加数据
var a = []int{1, 2, 3}
b := append(a, 4)
b) 使用copy() 函数 copy 在两个 slice 间复制数据,复制长度以 len 小的为准
var a = []int{1, 2, 3, 4, 5}
b := []int{100, 200}
copy(a, b)
容器
1、Map定义
a) 声明一个Map
b) 通过make来创建Map
var m1 map[int]string = make(map[int]string, 10)
var m2 = make(map[int]string, 10)
c) 通过 := 语法来定义Map
m1 := map[int]string{}
m2 := make(map[int]string, 10)
2、Map增删改查操作
m := map[string]string{"key0": "Linux", "key1": "Python"}
a)增
b)查
c)删
d)改
注意:Map可以使用len()函数,但不能使用cap()函数
管道
1、Channel定义
a) channel声明
var ch chan int
var ch chan string
var ch chan map[int]string
b) 使用make定义,无缓冲channel
var ch1 chan int = make(chan int)
var ch2 = make(chan int)
ch3 := make(chan int)
c) 使用make定义,有缓冲channel
var ch1 chan int = make(chan int, 10)
var ch2 = make(chan int, 10)
ch3 := make(chan int, 10)
d) 只读channel(chan在<-之后)
var ch1 <-chan int
var ch2 <-chan int = make(<-chan int, 10)
var ch3 = make(<-chan int, 10)
ch4 := make(<-chan int, 10)
e) 只写channel(chan在<-之前)
var ch1 chan<- int
var ch2 chan<- int = make(chan<- int, 10)
var ch3 = make(chan<- int, 10)
ch4 := make(chan<- int, 10)
注意:普通 channel 可以隐式转为只读channel或只写channel;只读channel或只写channel不能转为普通 channel。
2、管道操作
a) channel 写入、读取操作
ch := make(chan int, 1)
ch <- 99 // 写入chan
value, ok := <-ch // 读取chan
b) channel 关闭操作
close(ch)
注意:向已经关闭的 channel 发送数据会引发 panic 错误