golang 限制 到 chan 的数据长度
时间: 2024-02-26 16:58:27 浏览: 158
在 Golang 中,可以使用带缓冲的 channel 来限制 channel 中数据的长度。带缓冲的 channel 会在 channel 中缓存一定量的数据,当缓存区满时,写入操作会被阻塞,直到读出一些数据腾出缓存空间。当缓存区为空时,读取操作会被阻塞,直到有新的数据写入。因此,通过设置缓存区的大小,就可以限制 channel 中数据的长度。
下面是一个示例程序,用于限制 channel 中数据的长度:
```go
package main
import (
"fmt"
)
func main() {
ch := make(chan int, 3) // 缓存区大小为 3
// 写入 4 个数据,其中 1 个数据会被阻塞
ch <- 1
ch <- 2
ch <- 3
fmt.Println("before write 4")
ch <- 4 // 会被阻塞
// 读取 2 个数据,其中 1 个数据会被阻塞
fmt.Println("before read 1")
num1 := <-ch
fmt.Println(num1)
fmt.Println("before read 2")
num2 := <-ch
fmt.Println(num2)
fmt.Println("before read 3")
num3 := <-ch // 会被阻塞
fmt.Println(num3)
}
```
输出结果为:
```
before write 4
before read 1
1
before read 2
2
before read 3
3
```
在写入第 4 个数据时,因为缓存区已经满了,写入操作被阻塞了。在读取第 3 个数据时,因为缓存区已经为空了,读取操作被阻塞了。因此,通过设置 channel 的缓存区大小,就可以限制 channel 中数据的长度。
阅读全文