1. 协程和管道
package main
import (
"fmt"
"time"
)
func write(ch chan int) {
for i := 0; i < 10; i++ {
ch <- i
fmt.Println("write data: ", i)
}
}
func read(ch chan int) {
for {
var b int
b = <-ch
fmt.Println("read data: ", b)
time.Sleep(time.Second)
}
}
func main() {
intChan := make(chan int, 5)
go write(intChan)
go read(intChan)
time.Sleep(10 * time.Second)
}
2. 使用 WaitGroup 控制协程
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func write(ch chan int) {
for i := 0; i < 10; i++ {
ch <- i
fmt.Println("write data: ", i)
}
}
func read(ch chan int) {
for {
fmt.Println("read data: ", <-ch)
wg.Done()
}
}
func main() {
ch := make(chan int, 5)
wg.Add(10)
go write(ch)
go read(ch)
wg.Wait()
}