使用缓冲通道,如何测量通道中有多少元素?例如,我正在创建和发送这样的频道:
send_ch := make(chan []byte, 100) // code send_ch <- msg
我想衡量有多少封邮件都在通道send_ch。
我知道由于并发性,测量不会准确,因为在测量和操作之间可能会发生抢占。我将使用它来控制生产者和消费者之间的流量,即一旦我通过了高水印,就会改变一些行为,直到我通过低水印。
func len(v Type) int len 内置函数根据其类型返回 v 的长度: 数组:v 中元素的数量。 指向数组的指针:*v 中的元素数(即使 v 为零)。 切片或映射:v 中元素的数量;如果 v 为零,则 len(v) 为零。 字符串:v 中的字节数。 通道:通道缓冲区中排队(未读)的元素数量;如果 v 为零,则 len(v) 为零。
func len(v Type) int len 内置函数根据其类型返回 v 的长度:
package main import "fmt" func main() { c := make(chan int, 100) for i := 0; i < 34; i++ { c <- 0 } fmt.Println(len(c)) }
将输出:
34