package main import ( "fmt" "sync" "time" ) // 声明 通道中 元素类型 var b chan int var wg = new(sync.WaitGroup) func main() { fmt.Println(b) // 初始化 通道 // 通道需初始化后才能使用 // 一个没有缓冲区的通道 b = make(chan int) fmt.Println(b) // 带缓冲区的通道初始化 c := make(chan int, 16) fmt.Println(c) wg.Add(1) // 由另一个 goroutine 负责接收 go func() { fmt.Println("goroutine 接收: 等待接收 通道 b 中的值") // 从通道 b 接收一个值 t := <-b fmt.Printf("goroutine 接收: %d\n", t) wg.Done() }() wg.Add(1) go func() { time.Sleep(500 * time.Millisecond) fmt.Println("goroutine 发送: 将 10086 发送到 通道 b 中") // 将 10086 发送至 通道 b 中 // 没人接收将会导致死锁 b <- 10086 wg.Done() }() wg.Wait() }