第一個坑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 協議》,轉載必須註明作者和本文連結