Golang Channel 应用场景
Golang Channel
应用场景
选取多个结果中较快的
如果多个步骤中的一个步骤出现错误就算是失败,需要等待其中任意一个任务完成,可以使用chan
,相当于选择两个中最快的一个结果
func main() {
errc := make(chan error, 2) // buffered so we don't block timeout or Handshake
go func() { // M1
errc <- e()
}()
go func() {// Mn
errc <- e()
}()
if err := <-errc; err != nil {
// process any err,
fmt.Printf("Hello, err:%v", err)
}
fmt.Println("Hello, 世界")
}
等待所有结果返回
使用waitGroup
+channel实现,需要即处理返回值,也处理错误信息
func main() {
wg := sync.WaitGroup{}
errc := make(chan error, 2) // buffered so we don't block timeout or Handshake
wg.Add(1) // 注意这里要写在外面,而不是 go func(){} 中
go func() { // M1
wg.Done()
errc <- e()
}()
wg.Add(1)
go func() {// Mn
wg.Done()
errc <- e()
}()
wg.Wait()
close(errc)
if err := <-errc; err != nil {
// process any err,
fmt.Printf("Hello, err:%v", err)
}
fmt.Println("Hello, 世界")
}
内容来自博客园,拒绝爬虫网站