我最近遇到了一個編碼練習,我在 python 中解決了這個問題,我不得不在其中移植一個“算法”。我不知道它是怎么稱呼的,這就是我描述它的原因:每一行都是通過按順序打印的相同數(shù)字的數(shù)量和相關數(shù)字對前一行的描述。這是一個例子:111211211111221312211etc我開始學習 Go 及其通道和并發(fā)功能。所以我回到這個練習,試圖與 Go 并行更有效地解決它。這是我到目前為止得到的:package mainfunc main() { channel := make(chan uint8) go treeCalcRoutine(channel, 0) channel <- 1 close(channel) //defer is not an option in this case because the channel has //to be closed before main exits}func treeCalcRoutine(in <-chan uint8, generation int) { if generation > 10 { return // return after 10 recursive iterations } out := make(chan uint8) defer close(out) num := uint8(1) previous := <-i go treeCalcRoutine(out, generation+1) for val := range in { switch { case val == previous: num++ default: num = uint8(1) out <- num out <- val } previous = val } out <- num out <- previous}在嘗試使用Delve調試程序時,我發(fā)現(xiàn)程序在嘗試遍歷空/關閉通道時無一例外地退出(并且退出狀態(tài)為 0)。在這種情況下,我希望程序完全跳過 for 循環(huán)。我仍然想自己解決這個挑戰(zhàn),所以如果有人能給我指出正確的方向而不是提供一個有效的解決方案,我將不勝感激。此外,請指出任何其他可以做得更好的問題/案例(如限制generation)。編輯:由于人們要求我發(fā)布錯誤:由于某種原因根本沒有錯誤。一旦到達 for 循環(huán),程序就會退出。
1 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
所以問題實際上不是 for 循環(huán)在遇到關閉的通道時退出,而是主例程在那個確切的時間退出,這導致所有其他 goroutine 也終止。在這種情況下,我被建議使用等待組。
- 1 回答
- 0 關注
- 73 瀏覽
添加回答
舉報
0/150
提交
取消