#20.5 golang cap() и len() для Каналов - определяем длину и вместимость

Ранее мы уже говорили про функции 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
vedro-compota's picture

уточнить пример получения len() для небуферизированного канала - чтобы убедиться, что там всегда ноль как и для cap()

_____________
матфак вгу и остальная классика =)