在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
答案 0 :(得分:3)
我不这么认为。 Go有buffered channels但是当频道已满时它们会阻止。
你可能必须自己写一些东西,也许在管理缓冲区的中间使用goroutine(可能使用deque;)