package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan int, 3) // 容量为 3 的有缓冲 channel

	fmt.Println("[Main] 开始发送 3 个元素...")
	ch <- 1
	fmt.Println("[Main] 已发送 1")
	ch <- 2
	fmt.Println("[Main] 已发送 2")
	ch <- 3
	fmt.Println("[Main] 已发送 3 (已满)")

	// 再发送一个会怎样？
	go func() {
		fmt.Println("[Sender] 尝试发送第 4 个元素(会阻塞，直到有接收者)...")
		ch <- 4
		fmt.Println("[Sender] 第 4 个元素发送成功")
	}()

	time.Sleep(1 * time.Second)

	fmt.Println("[Main] 开始接收...")
	for i := 0; i < 4; i++ {
		v := <-ch
		fmt.Println("[Main] 收到:", v)
	}

	fmt.Println("[Main] 程序结束")
}
