Post
6655
14 mins
前言
平时写代码或者阅读代码的时候,经常会在方法内看到ctx context.Context
这样的参数。本文就记录一下有关于context.Context
的知识。
…
Post
1650
4 mins
前言
本文将介绍下golang源码里经常出现的东西: unsafe.Pointer
和uintptr
…
Post
4145
9 mins
前言
本文将从golang的源码方面分析:如何启动http服务,这个服务是怎么对外提供服务的,以及为什么可以保证高性能。
…
Post
2611
6 mins
本文将介绍slice的数据结构、常用操作的源码。
源码基于golang 1.18,位于runtime/slice.go
…
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
事发情况
当天晚上生产服务一直在告警,刚刚开始只是一个数据保存接口耗时过长,紧接着整个服务接口都耗时,对外表现为整个服务不可用。
…