Проверка длины и пропускной способности каналов
Мы можем использовать встроенные функции len и cap для проверки длины и пропускной способности канала. Однако мы редко делаем это на практике. Причина, по которой мы редко используем функцию len для проверки длины канала, заключается в том, что длина канала могла измениться после len возврата вызова функции. Причина того, что мы редко используем эту функцию cap для проверки пропускной способности канала, заключается в том, что пропускная способность канала часто известна или не важна.
Однако есть несколько сценариев, в которых нам нужно использовать две функции. Например, иногда мы хотим получить все значения, буферизованные в незакрытом канале c, в который больше никто не будет отправлять значения. Тогда мы можем использовать следующий код для получения оставшихся значений.
Мы также можем использовать механизм try-receive, представленный ниже, для выполнения той же работы. Эффективность обоих способов почти одинакова. Преимущество механизма try-receive заключается в том, что текущая горутина не обязана быть единственной принимающей горутиной.
Иногда горутина может захотеть записать некоторые значения в буферизованный канал c, пока он не заполнится, не входя в состояние блокировки в конце, и горутина является единственным отправителем канала, тогда мы можем использовать следующий код для выполнения этой работы.
Конечно, мы также можем использовать механизм try-send, представленный ниже, для выполнения той же работы.