Go channel使用,实现队列功能

前面写了两篇使用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))
}
}