记两个未初始化而导致的坑
第一个坑sync.Map
var root = sync.Map{}
var child sync.Map
child.Store("key0", "0")
root.Store("child", child)
child.Store("key1", "1")
log.Println(root.Load("child"))
/*
如果去掉第三行,打印的child值将是空的。
如果去掉第三行,把第二行换成var child = sync.Map{},打印的child值仍然是空的。
*/
第二个坑Channel
var ch chan int
go func() {
ch <- 1
}()
go func() {
<-ch
}()
time.Sleep(time.Second)
/*
这里如果ch的接收是在主线程,则编译器可以检查出错误:all goroutines are asleep - deadlock。可是如果在子线程里,只会阻塞而没有任何错误,不仔细检查代码根本发现不了问题!
*/
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: