记两个未初始化而导致的坑

第一个坑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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!