1 回答
TA贡献1757条经验 获得超7个赞
以下作品。我的意思是它不会死锁。由于您在通道上的范围循环中具有打印机功能,因此它会在通道关闭后自动停止。我在接近尾声时添加了 3 秒延迟,以便让 try 循环有时间打印。不过请阅读文档。它将 100% 解释这些细节。
package main
import (
"fmt"
"sync"
"time"
)
func printAfterDelay(delay time.Duration, message string, wg *sync.WaitGroup) {
time.Sleep(delay)
fmt.Println(message)
}
func add(a int, b int, chan1 chan int, wg *sync.WaitGroup) {
c := a + b
chan1 <- c
wg.Done()
}
func printer(chan1 chan int, wg *sync.WaitGroup) {
for result := range chan1 {
fmt.Println(result)
}
}
func main() {
//var wg sync.WaitGroup
wg := &sync.WaitGroup{}
fmt.Println("Start...")
go printAfterDelay(2000*time.Millisecond, "Try", wg)
chan1 := make(chan int)
wg.Add(1)
go add(5, 4, chan1, wg)
wg.Add(1)
go add(3, 1, chan1, wg)
go printer(chan1, wg)
time.Sleep(3000 * time.Millisecond)
wg.Wait()
close(chan1)
fmt.Println("End")
}
- 1 回答
- 0 关注
- 152 浏览
添加回答
举报