[問題] Golang iterate callback

作者: carylorrk (carylorrk)   2014-10-08 18:56:55
目前在練習用 golang 實作一些東西
裏面寫到可以讓使用者自定一個 combiner 把 callbacks 結果做處理
一開始我先把所有 callback 都跑一遍,然後把所有結果用 slice 包起來傳給 combiner
http://ideone.com/dRYZDb
但是我希望在 combiner 裏每次拿下一個結果的時候才計算(呼叫 callback)
C++ 可以自定 iterator, 在 golang 想到用 channel 達到類似功能的做法
http://ideone.com/YwgBm4
這樣的界面對使用者最方便,combine 裏可以直接 iterate result
但是會有兩個問題:
1. 每次會先做完下一個, send to channel 時才卡住,我希望的是如果沒有讀就不要做
2. combiner 中途離開時沒有辦法很好的關閉 goroutine...
雖然可以直接關掉 channel 然後做 recover,但是感覺很不好XD
目前我想到的方法是把 callback wrap 起來給 combiner 呼叫
http://ideone.com/tQ7mbu
不過這樣 combiner 裏需要使用者自己呼叫才能得到結果
不知道有沒有更好的處理方式?

Links booklink

Contact Us: admin [ a t ] ucptt.com