1 回答
TA贡献2051条经验 获得超10个赞
如果您不想使用 slice ,那么我认为这样的事情会起作用:-(操场)
package main
import (
"fmt"
)
func main() {
chang1 := make(chan string)
chang2 := make(chan string)
chang3 := make(chan string)
channels := []chan string{chang1, chang2, chang3}
for i := 1; i < 10; i += 3 {
go g1(i, channels[i%3])
go g2(i+1, channels[(i+1)%3])
go g3(i+2, channels[(i+2)%3])
fmt.Print(<-channels[i%3])
fmt.Print(<-channels[(i+1)%3])
fmt.Print(<-channels[(i+2)%3])
}
}
func g1(i int, chanel chan string) {
chanel <- fmt.Sprintln("g1", i)
}
func g2(i int, chanel chan string) {
chanel <- fmt.Sprintln("g2", i)
}
func g3(i int, chanel chan string) {
chanel <- fmt.Sprintln("g3", i)
}
output
g1 1
g2 2
g3 3
g1 4
g2 5
g3 6
g1 7
g2 8
g3 9
但请记住,在此解决方案中,您必须运行 3 个 goroutine,然后等待它们全部给出结果,然后返回
如果这不适合您,则需要使用缓冲通道。
- 1 回答
- 0 关注
- 113 浏览
添加回答
举报