附录A: Go语言常见坑
可变参数是空接口类型
func main() {
var a = []interface{}{1, 2, 3}
fmt.Println(a)
fmt.Println(a...)
}[1 2 3]
1 2 3数组是值传递
func main() {
x := [3]int{1, 2, 3}
func(arr [3]int) {
arr[0] = 7
fmt.Println(arr)
}(x)
fmt.Println(x)
}map遍历是顺序不固定
返回值被屏蔽
recover必须在defer函数中运行
main函数提前退出
通过Sleep来回避并发中的问题
独占CPU导致其它Goroutine饿死
不同Goroutine之间不满足顺序一致性内存模型
闭包错误引用同一个变量
在循环内部执行defer语句
切片会导致整个底层数组被锁定
空指针和空接口不等价
内存地址会变化
Goroutine泄露
Last updated