亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

【九月打卡】第11天 go語言接口的值類型

標簽:
Go

课程名称GO开发工程师

课程章节:6-2:使用channel等待goroutine结束;6-3:使用channel遍历树

课程讲师ccmouse

课程内容

  1. 使用channel等待goroutine结束示例:
type worker struct {
	in   chan int
	done chan bool
}

func doWork(id int, c chan int, done chan bool) {
	for n := range c {
		fmt.Printf("id: %d---> n: %c\n", id, n)
		done <- true
	}
}

func createWorker(id int) worker {
	w := worker{
		in:   make(chan int),
		done: make(chan bool),
	}
	go doWork(id, w.in, w.done)
	return w
}

func chanDemo() {
	workers := make([]worker, 10)
	for i := 0; i < 10; i++ {
		workers[i] = createWorker(i)
	}
	for i, w := range workers {
		w.in <- 'a' + i
	}
	for _, w := range workers {
		<-w.done // 使用channel来等待 goroutine结束
	}
}
  1. 使用内建对象 sync.WaitGroup 来控制goroutine结束示例:
type worker2 struct {
	in   chan int
	done func() // 传一个函数,具体的关闭方法由使用者写在函数体内
}
func doWork2(id int, w worker2) {
	for n := range w.in { //
		fmt.Printf("id: %d---> n: %c\n", id, n)
		w.done()
	}
}

func createWorker2(id int, wg *sync.WaitGroup) worker2 {
	w := worker2{
		in: make(chan int),
		done: func() {
			wg.Done()
		},
	}
	go doWork2(id, w)
	return w
}

func chanDemo2() {
	var wg sync.WaitGroup // 内建对象

	workers := make([]worker2, 10)
	for i := 0; i < 10; i++ {
		workers[i] = createWorker2(i, &wg)
	}

	wg.Add(20) // 20个并发任务

	for i, w := range workers {
		w.in <- 'a' + i
	}
	for i, w := range workers {
		w.in <- 'A' + i
	}

	wg.Wait() // 等待20个并发任务完成
}

  1. 使用channel遍历树示例:
// 内部实现者:
func (node *Node) TraverseWithChan() chan *Node {
	out := make(chan *Node)
	go func() {
		node.TraverseFunc(func(node *Node) {
			out <- node
		})
		close(out)
	}()
	return out
}
// 外部使用者:
c := root.TraverseWithChan()
maxNode := 0
for node := range c {
	if node.Value > maxNode {
		maxNode = node.Value
	}
}

课程收获

  1. channel 输入数据是阻塞式的。

图片描述
图片描述

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消