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, 世界")
}


posted @ 2022-06-29 18:07  随风而行-  阅读(123)  评论(0编辑  收藏  举报