#20.5 golang cap() и len() для Каналов - определяем длину и вместимость
Primary tabs
Forums:
Ранее мы уже говорили про функции cap() и len() для срезов, а для каналов они работают следующим образом:
- cap() - возвращает размер буфера канала
- len() - возвращает реальное количество данных в буфере
Как мы помним, каналы могут быть буферизированными и небуферизированными, так вот для канала без буфера и len() и cap() всегда равны нулю (в силу отсутствия там буфера)
Рассмотрим пример для буферизированного канала:
package main
import (
"fmt"
)
func showParams(channel chan int) {
fmt.Println("cap:",
cap(channel),
"|", "len:", len(channel))
}
func main() {
// С буферизированым каналом всё понятно:
buffChannel := make(chan int, 3)
showParams(buffChannel)
buffChannel <- 10
showParams(buffChannel)
buffChannel <- 20
showParams(buffChannel)
}
-- если запустим этот код, то получим распечатку:
cap: 3 | len: 0 cap: 3 | len: 1 cap: 3 | len: 2
- Log in to post comments
- 59 reads
vedro-compota
Thu, 04/23/2026 - 20:43
Permalink
уточнить пример получения len
уточнить пример получения len() для небуферизированного канала - чтобы убедиться, что там всегда ноль как и для cap()
_____________
матфак вгу и остальная классика =)