有缓冲channel通道容量可自定义,可用于数据传递。声明方式:ch := make(chan int, 3)
长度表示通道中暂存的数据个数,容量表示最大数据个数。len(ch)/cap(ch)
有缓冲channel只有在容量占满的情况下才发生阻塞,数据读取遵循先进先出的原则。
代码示例:
package main
import (
"fmt"
"time"
)
/**
有缓冲channel
*/
func testChannel() {
ch := make(chan int, 3)
go func() {
for i := 0; i < 10; i++ {
fmt.Printf("写入第%d个数据\n", i)
ch <- i
fmt.Printf("容量:%d,长度:%d\n", cap(ch), len(ch))
}
}()
time.Sleep(time.Second * 3)
for i := 0; i < 10; i++ {
fmt.Printf("读取第%d个数据\n", <-ch)
}
}
func main() {
testChannel()
}
网友评论