Go 的 map 被并发写时,为什么连 recover 都救不了
先看一段必崩的代码
1package main
2
3import "sync"
4
5func main() {[ CATEGORY ]
go 分类下共有 3 篇编程实战文章,涵盖常见问题排查、代码示例与实践经验。
1package main
2
3import "sync"
4
5func main() {切片是 Go 里用得最多的数据结构,也是最容易被“用错但不报错”的一个。append 不报错、s[1:3] 不报错、函数传参也不报错,可程序的行为和内存占用却可能和你以为的完全不同。这篇把三个最容易踩的点拆开讲:切片到底是什么、扩容怎么发生、底层数组什么时候会被无意共享。
切片不是“数组的引用”这么模糊的东西,它在运行时就是一个三字段结构:
1type slice struct {上周排查一个数据错乱的 bug,最后定位到三行代码:
1base := []int{1, 2, 3, 4}
2a := base[:2]
3b := base[1:3]