Post
2254
5 mins
切片使用
仅记录一些常用操作
1
2
3
4
|
// 创建切片
slice := make([]int, 1, 3) // 使用make可以创建切片的引用,第二个参数代表切片长度,第三个代表切片的容量,使用该种方法生成具有空值
// 创建切片
var slice []int // 直接对切片进行初始化操作
|
1
2
3
4
5
6
7
8
9
10
|
// 使用foreach遍历
slice := []int{1, 2, 3}
for _, val := range slice {
fmt.Println(val)
}
// 直接使用索引进行遍历
slice := []int{1, 2, 3}
for i := 0; i < len(slice); i++ {
fmt.Println(slice[i])
}
|
1
2
3
4
|
slice := make([]int, 3)
for i := 0; i < 3; i++ {
slice = append(slice, i) // 该方式会在切片的末尾追加元素
}
|
1
2
3
|
slice1 := []int{1, 2, 3}
slice2 := make([]int, 3)
copy(slice2, slice1)
|
1
2
3
|
slice := []int{1, 2, 3}
fmt.Println(slice[0:2]) // 输出内容:[1 2], slice[0:2]代表去slice第[0]个元素,一直取到第[2]元素(不包括[2])
fmt.Println(slice[0:1:2]) // 输出内容:[1], slice[0:1:2]第三个数字表示新切片容量为(2-0=2)
|
切片的数据结构
刚刚在切片特性内介绍到了golang中切片其实是值拷贝。
这里其实有一个疑问,如果切片元素内过多,那么每次传值不会特别特别慢吗?毕竟每次都要拷贝一个数组。别急,接下来介绍一下切片的数据结构。
…
Post
902
2 mins
事发情况
当天晚上生产服务一直在告警,刚刚开始只是一个数据保存接口耗时过长,紧接着整个服务接口都耗时,对外表现为整个服务不可用。
…
Post
839
2 mins
大学时操作系统课程里面就介绍过,每个进程都会有一个进程控制块(Process control block),他们之间是一一对应的关系。
…