《Go语言高级编程》读书笔记

禄源
2023-12-01

附录A:Go语言常见的坑

  1. 可变参数是空接口类型时,需要注意参数展开的问题
  2. 数组是值传递,所以函数内的修改无法体现。
  3. map遍历时返回顺序不固定,不能依赖map的返回顺序。
  4. 局部作用域中,返回值会被同名的局部变量屏蔽。
  5. recover必须在defer函数中进行,并且捕获的只能是祖父级函数的异常。
  6. main函数提前退出时,后台goroutine无法保证完成任务。
  7. 不能通过sleep来回避并发中的问题
  8. 独占CPU会导致其他goroutine饿死,需要用runtime.Gosched()来让渡CPU。
  9. 不同goroutine之间不满足顺序一致性内存模型
  10. 闭包错误引用同一个变量
  11. 在循环内部执行defer语句,会导致资源延迟释放
  12. 切片会导致整个底层数组被锁定,底层数组较大时,会对内存产生很大压力。
  13. 空指针和空接口不等价。
  14. 内存地址会变化。
  15. Goroutine泄露,可以用context包来避免。
 类似资料: