Golang Context包 详解

context 主要用来在 goroutine 之间传递上下文信息,包括:取消信号、超时时间、截止时间、k-v 等。

context 用来解决 goroutine 之间退出通知元数据传递的功能。

阅读更多

golang 切片

切片结构

1
2
3
4
5
type slice struct {
array unsafe.Pointer
len int
cap int
}
1
2
a = make([]int, 0)
unsafe.Sizeof(a) // 24

切片组成元素:

  • 指针:指向底层数组
  • 长度:切片中元素的长度,不能大于容量
  • 容量:指针所指向的底层数组的总容量
阅读更多

内存对齐

CPU与内存的交互

CPU获取内存数据:CPU通过地址总线(Address Bus)发送地址信号到内存,并将控制总线(Control Bus)信号设置为Enable信号,之后内存会将数据通过数据总线(Data Bus)返回给CPU。
CPU写入内存数据:CPU通过地址总线(Address Bus)发送地址信号到内存,并将控制总线(Control Bus)信号设置为Set信号,最后将数据通过数据总线(data bus)发送到内存并进行写入。

内存

CPU要想从内存读取数据,需要通过地址总线,把地址传输给内存,内存准备好数据,输出到数据总线
若是32位地址总线,可以寻址[0,2的32次方-1],占用内存4g

阅读更多

golang-defer

defer的使用特点

其实其中一点特性我理解起来就有点像java中的finally的用法

关于官方解释

1
2
3
A defer statement defers the execution of a function until the surrounding function returns.

The deferred call's arguments are evaluated immediately, but the function call is not executed until the surrounding function returns.

这里提到了defer调用的参数会立即计算,但在周围函数返回之前不会执行函数调用。

阅读更多

golang 中获取字符串个数

golang 中获取字符串个数

在 golang 中不能直接用 len 函数来统计字符串长度,查看了下源码发现字符串是以 UTF-8 为格式存储的,说明 len 函数是取得包含 byte 的个数

阅读更多