#1
emmm 上面说的有点问题, 你这里是传的参数 , 所以 str 不会有问题
@
gy123 无脑 go 版本
```golang
package main
import (
"fmt"
"strconv"
"sync"
"time"
)
func say0(str string, wg *sync.WaitGroup) {
defer func() {
_ = recover()
// 处理异常
wg.Done()
}()
time.Sleep(3 * time.Second)
fmt.Println(str)
}
func main() {
wg := &sync.WaitGroup{}
for i := 0; i < 100000; i++ {
wg.Add(1)
go say0("协程" + strconv.Itoa(i), wg)
}
wg.Wait()
}
```
控制协程数量版本
```golang
package main
import (
"fmt"
"strconv"
"sync"
"time"
)
func say0(c chan int, wg *sync.WaitGroup) {
defer func() {
_ = recover()
// 处理异常
wg.Done()
}()
for {
time.Sleep(1 * time.Second)
i, ok := <-c
if ok {
fmt.Println("协程" + strconv.Itoa(i))
} else {
fmt.Println("协程结束")
break
}
}
}
func main() {
var c chan int
c = make(chan int, 10)
wg := &sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go say0(c, wg)
}
for i := 0; i < 100; i++ {
c <- i
}
close(c)
fmt.Printf("close")
wg.Wait()
}
```