八进制

go 里 0 开头的常量表示八进制,7 以下的十进制与八进制进行位操作,十进制也会被视为八进制

并发读写map

无法 recover 住,会导致程序 panic 后退出。

并发写全局结构体

程序读写一个结构体的过程是怎样的?

是直接将整个结构体载入内存或者赋值吗?

不是的,在读结构体时,其实是将结构体的字段一个个加载入寄存器中的

赋值也是,依次给每个字段赋值。这个过程可以从汇编中观察到:

// 将 R0 和 R1 寄存器的值分别写入 ab 的地址
00010 (15) MOVD R0, "".ab-32(RSP)
00011 (15) MOVD R1, "".ab-24(RSP)

因此,并发写的情况下就会出现问题

如果是并发 append 切片,就可能会出现写入A协程的底层数组地址、B协程的长度,导致切片中出现空值、甚至越界

Last updated