在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关闭 一个通道意味着不能再向这个通道发送值了。这个特性可以用来给这个通道的接收方传达工作已经完成的信息。 Example: package main import "fmt" //在这个例子中,我们将使用一个 jobs 通道来传递 main() 中 Go协程任务执行的结束信息 //到一个工作 Go 协程中。当我们没有多余的任务给这个工作 Go 协程时 //我们将 close 这个 jobs 通道。 func main() { jobs := make(chan int, 5) done := make(chan bool) //这是工作 Go 协程。使用 j, more := <- jobs 循环的从jobs 接收数据。 //在接收的这个特殊的二值形式的值中,如果 jobs 已经关闭了,并且通道中所有的值都已经接收完毕, //那么 more 的值将是 false。当我们完成所有的任务时,将使用这个特性通过 done 通道去进行通知。 go func(){ for{ j, more := <-jobs if more{ fmt.Println("recevied jobs:", j) }else{ fmt.Println("recevied all jobs") done <- true return } } }() //这里使用 jobs 发送 3 个任务到工作函数中,然后关闭 jobs。 for i:=1; i<=3; i++{ jobs <- i fmt.Println("Send job:", i) } //关闭通道 close(jobs) //我们使用前面学到的通道同步方法等待任务结束。 <- done } Result: $ go run example.go Send job: 1 Send job: 2 Send job: 3 recevied jobs: 1 recevied jobs: 2 recevied jobs: 3 recevied all jobs
|
请发表评论