golang中是否有任何等效的滑动缓冲区chan?

时间:2016-09-10 08:57:42

标签: go clojure

在clojure中我们可以使用滑动缓冲区;在golang中是否有任何等价物?

(require '[clojure.core.async :refer [go-loop <! >!! sliding-buffer chan]])
(def sliding-chan (chan (sliding-buffer 1)))
(go-loop []
  (println "Received:" (<! sliding-chan))
  (recur))
(dotimes [n 100]
  (>!! sliding-chan n))

;;=> Received: 0 
;;=> Received: 99

1 个答案:

答案 0 :(得分:3)

我不这么认为。 Go有buffered channels但是当频道已满时它们会阻止。

你可能必须自己写一些东西,也许在管理缓冲区的中间使用goroutine(可能使用deque;)