[Golang]2个goroutine之间的通信

为什么在那个脚本http://play.golang.org/p/Q5VMfVB67- goroutine 淋浴不起作用?


package main


import "fmt"


func main() {

    ch := make(chan int)

    go producer(ch)

    go shower(ch)

    for i := 0; i < 10; i++ {

        fmt.Printf("main: %d\n", i)

    }

}

func shower(c chan int) {

    for {

        j := <-c

        fmt.Printf("worker: %d\n", j)

    }

}

func producer(c chan int) {

    for i := 0; i < 10; i++ {

        c <- i

    }

}


阿波罗的战车
浏览 218回答 1
1回答

SMILET

在 goroutine 有机会完成自己的工作之前,您的 main 函数退出方式。您需要在结束之前等待它们完成main()(这会停止所有程序),例如sync.WaitGroup,如“等待 n 个 goroutines 的终止”中所示。在您的情况下,您需要等待 goroutineshower()结束:传递一个wg *sync.WaitGroup实例,以便在完成处理时shower()发出信号wg.Done()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go