前面写了两篇使用Go实现的队列
Go 利用slice实现循环队列
Go 利用链表实现循环队列
这里记录下channel 的使用,感觉功能和queue很相像,也比较简单,记录下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| package main
import ( "log" "time" )
func main() { c := make(chan interface{}, 10)
go read(c, 1) go read(c, 2) go read(c, 3)
for i := 0; i < 15; i++ { time.Sleep(100 * time.Millisecond) c <- i } close(c) time.Sleep(5 * time.Second) }
func read(c <-chan interface{}, id int) { for { item, ok := <-c if !ok { log.Println("channel close") break } log.Println("id", id, "------", item.(int)) } }
|