A buffered channel stores a limited number of values before a receive.

Buffered Capacity

buffered_capacity.go
package main

import "fmt"

func main() {
	var second = 
	queue := make(chan string, 3)

	queue <- "red"
	queue <- second

	fmt.Println("capacity=", cap(queue))
	fmt.Println("waiting=", len(queue))
	fmt.Println("first=", <-queue)
	fmt.Println("waitingAfterOne=", len(queue))
}
package main

import "fmt"

func main() {
	var second = 
	queue := make(chan string, 3)

	queue <- "red"
	queue <- second

	fmt.Println("capacity=", cap(queue))
	fmt.Println("waiting=", len(queue))
	fmt.Println("first=", <-queue)
	fmt.Println("waitingAfterOne=", len(queue))
}
package main

import "fmt"

func main() {
	var second = 
	queue := make(chan string, 3)

	queue <- "red"
	queue <- second

	fmt.Println("capacity=", cap(queue))
	fmt.Println("waiting=", len(queue))
	fmt.Println("first=", <-queue)
	fmt.Println("waitingAfterOne=", len(queue))
}
buffered capacity `cap(channel)` reports the buffer size, while `len(channel)` reports how many values are waiting.