package main

import "fmt"

// 只负责发送数据
func producer(out chan<- int) {
	for i := 1; i <= 5; i++ {
		fmt.Println("[Producer] 发送:", i)
		out <- i
	}
	fmt.Println("[Producer] 关闭 channel")
	close(out) // 只有发送方才能关闭
}

// 只负责接收数据
func consumer(in <-chan int) {
	for v := range in { // 直到 channel 被关闭
		fmt.Println("[Consumer] 接收:", v)
	}
	fmt.Println("[Consumer] channel 已关闭，接收结束")
}

func main() {
	ch := make(chan int)

	go producer(ch) // ch 在这里被当作 只发送 channel 使用
	consumer(ch)    // ch 在这里被当作 只接收 channel 使用
}
