Jak mierzyć liczbę elementów w kanale za pomocą kanału buforowanego? Na przykład tworzę i wysyłam na takim kanale:
send_ch := make(chan []byte, 100)
// code
send_ch <- msg
Chcę zmierzyć ile wiad są w kanale send_ch .
Zdaję sobie sprawę, że ze względu na współbieżność pomiar nie będzie dokładny, ponieważ między pomiarem a działaniem może wystąpić wywłaszczanie (np. Omówione w tym filmie Google I / O 2012 - Go Concurrency Patterns ). Użyję tego do kontroli przepływu między producentami a konsumentami, tj. Gdy przejdę przez wysoki znak wodny, zmieniając pewne zachowanie, aż przejdę z powrotem przez niski znak wodny.
cap
zrobiłaby to wbudowana funkcja .c := make(chan int)
), nie można uzyskać jego długości. Nie znalazłem powodu. Tak, jego pojemność również wraca jako 0