我需要使用 3 个名为g1
, g2
, g3
. 并以循环方式在上述 3 个 goroutine 中分配 1-10 的数字。他们将根据提供的数字做一些假设性的工作。程序应按以下方式打印输出。
g1-1
g2-2
g3-3
g1-4
g2-5
g3-6
...
任务必须同时执行,但输出必须按顺序排列。
我已经实现了下面的代码,它分配数字和打印,但如上所述不能保证输出打印顺序。
我需要一些帮助来修复以下代码或关于另一种方法的建议以获得上述所需的输出。
方法一:
package main
import (
"fmt"
"sync"
)
func main() {
chang1 := make(chan int)
chang2 := make(chan int)
chang3 := make(chan int)
var wg sync.WaitGroup
wg.Add(3)
go func() {
for num := range chang1 {
fmt.Println("g1", num)
}
wg.Done()
}()
go func() {
for num := range chang2 {
fmt.Println("g2", num)
}
wg.Done()
}()
go func() {
for num := range chang3 {
fmt.Println("g3", num)
}
wg.Done()
}()
channels := []chan int{chang1, chang2, chang3}
for i := 1; i <= 10; i++ {
currentCh := (i - 1) % 3
channels[currentCh] <- i
}
close(chang1)
close(chang2)
close(chang3)
wg.Wait()
}
输出(顺序不正确)
g1- 1
g1- 4
g2- 2
g3- 3
g1- 7
g2- 5
g2- 8
g3- 6
g3- 9
g1- 10
...
侃侃无极
相关分类