go - 发出所有goroutine后如何使用goroutine按顺序打印数字

标签 go goroutine

在发出所有goroutine bing后如何使用goroutine按顺序打印数字?

这是随机打印数字的代码:

func main() {

    var wg sync.WaitGroup
    wg.Add(10)
    for i := 1; i <= 10; i++ {
        go func(i int) {
            defer wg.Done()
            fmt.Printf("i = %d\n", i)
        }(i)
    }
    wg.Wait()

发出goroutines以打印如下所示的数字,这不是我想要的解决方案。
func main() {

    var wg sync.WaitGroup

    for i := 1; i <= 10; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            fmt.Printf("i = %d\n", i)
        }(i)
        wg.Wait()
    }

我希望发出所有goroutine,然后让它们按顺序打印数字。

最佳答案


func main() {
    wg.Add(10)
    count := 10
    cBegins := make([]chan interface{}, count)
    for i := range cBegins {
        cBegins[i] = make(chan interface{})
    }
    go func() {
        cBegins[0] <- struct {}{}
    }()
    for i := 0; i < count; i++ {
        go func(i int) {
            defer wg.Done()
            <-cBegins[i]
            fmt.Printf("i = %d\n", i)
            if i < 9 {
                cBegins[i+1] <- struct {}{}
            }
        }(i)
    }

    wg.Wait()

}

关于go - 发出所有goroutine后如何使用goroutine按顺序打印数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62156153/

相关文章:

go - gorilla Mux相同端点多个查询参数

Go 的垃圾收集器没有在正确的时间释放内存

go - 如何对 Go 中的按键事件使用react?

go sql driver + context canceled 似乎是 "leak"goroutines?

string - 为什么简单的 Go 应用程序占用大量内存

go - Sync.WaitGroup,为什么在 goroutine 中更接近

go - 可以退出带有事件 goroutine 的程序吗?

Golang 时间(分秒)

go - 如何访问所有连接的 tcp 客户端的变量?

go - 使用goroutine插入 map 的问题