回答

收藏

通道中的元素数

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

使用缓冲通道,如何测量通道中的元素?例如,我正在创建和发送这样的频道:7 K/ K+ j; L; S: {% C( B- T

    & ?+ _: T  h2 s4 r. s" m- r; e
  • send_ch := make(chan []byte,100)// codesend_ch 我想衡量有多少封邮件都在通道send_ch
    4 m+ K/ I2 ?! F$ A- d
  • 我知道由于并发性,测量不准确,因为测量和操作之间可能会有抢占。我会用它来控制生产者和消费者之间的流量,也就是说,一旦我通过高水印,我会改变一些行为,直到我通过低水印。. R0 K6 f8 M" Y8 [
  •                                                                ) _) E& }; D" h/ m! V" T
  •     解决方案:                                                               
    # V! ?4 ~4 r7 v: |' {3 N
  •                                                                 func len(v Type) int/ Y" g! C; f; m/ F3 V; U' s+ ?
  • len 内置函数根据其类型返回 v 的长度:
    : X1 M& D- e9 G5 d0 t1 G

  • + h1 z% Q; n. X' d5 h
  • 数组:v 中元素的数量。5 a- Z8 v$ q1 R6 x, B6 f
  • 指向数组的指针:*v 中的元素数(即使 v 为零)。
    7 W* a7 _7 Z# H: i+ f7 G
  • 切片或映射:v 中元素的数量;如果 v 为零,则 len(v) 为零。# J( n- V6 q3 J3 ^( [3 B/ S
  • 字符串:v 字节数。
    7 c) E. Y0 w& |* y+ X
  • 通道 v 为零,则 len(v) 为零。[code]package mainimport "fmt"func main()(){        c := make(chan int,100)     for i := 0; i 将输出:[code]34
    : a. v5 r" Y; u
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则