回答

收藏

通道中的元素数

技术问答 技术问答 230 人阅读 | 0 人回复 | 2023-09-12

使用缓冲通道,如何测量通道中的元素?例如,我正在创建和发送这样的频道:( o% `0 r  |0 S4 X' Z* f8 \- E
    4 m- Z; W7 i  Z+ F
  • send_ch := make(chan []byte,100)// codesend_ch 我想衡量有多少封邮件都在通道send_ch1 y3 Y% P* K. x! E* t( I
  • 我知道由于并发性,测量不准确,因为测量和操作之间可能会有抢占。我会用它来控制生产者和消费者之间的流量,也就是说,一旦我通过高水印,我会改变一些行为,直到我通过低水印。
    8 c9 M- R6 S- H9 l! x& m1 X; G8 O, H
  •                                                                1 _1 U0 ]' M) A$ U+ a& g6 g
  •     解决方案:                                                               
    8 q: R' V6 T. v: E# q* }! h2 v' F
  •                                                                 func len(v Type) int
      O% ~5 B  c# ?
  • len 内置函数根据其类型返回 v 的长度:
    " f$ o5 L3 z% f: r5 B& U
  • - T% \% |6 M! J% ~" F" `
  • 数组:v 中元素的数量。
    7 l# g6 R4 O( h0 q
  • 指向数组的指针:*v 中的元素数(即使 v 为零)。$ p: T5 u  K5 c2 L( B
  • 切片或映射:v 中元素的数量;如果 v 为零,则 len(v) 为零。
    - b+ S# I2 p/ I6 I5 r3 A6 g; z3 k
  • 字符串:v 字节数。
    / Z/ S* C6 ^2 R
  • 通道 v 为零,则 len(v) 为零。[code]package mainimport "fmt"func main()(){        c := make(chan int,100)     for i := 0; i 将输出:[code]34  f' L6 Q0 c( O* e( O" M
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则