// _Closing_ a channel indicates that no more values// will be sent on it. This can be useful to communicate// completion to the channel's receivers.package mainimport "fmt"// In this example we'll use a `jobs` channel to// communicate work to be done from the `main()` goroutine// to a worker goroutine. When we have no more jobs for// the worker we'll `close` the `jobs` channel.func main() { jobs := make(chan int, 5) done := make(chan bool) fmt.Println("1") go func() { for { fmt.Println("4") j, more := <-jobs if more { fmt.Println("received job", j) } else { fmt.Println("received all jobs") done <- true return } } }() fmt.Println("2") // This sends 3 jobs to the worker over the `jobs` // channel, then closes it. for j := 1; j <= 3; j++ { fmt.Println("3", j) jobs <- j fmt.Println("sent job", j) } fmt.Println("5") close(jobs) fmt.Println("6") fmt.Println("sent all jobs") //How does control go from here to the main's go routine - line 18. Who call's it? and How? // We await the worker using the // [synchronization](channel-synchronization) approach // we saw earlier. <-done fmt.Println("7")}https://play.golang.org/p/Xe_wh3YTmwk控制如何從第 46 行轉到第 18 行?
當沒有線路調用它時,控制如何轉到主 goroutine?
慕碼人2483693
2022-06-06 16:08:48