第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Go實(shí)例講解,利用channel實(shí)現(xiàn)協(xié)程的互動(dòng)-會(huì)聊天的Tom&Jerry

標(biāo)簽:
Go 架構(gòu) 安全

先上实例代码,后面再来详细讲解。

/**
 * 通过协程,多任务执行
 * 会聊天的Tom和Jerry
 * 通过 channel 让两个goroutine协作起来
 */
package main

import (
   "fmt"
   "sync"
)

func main() {
   wg := sync.WaitGroup{}
   chTom := make(chan string)
   chJerry := make(chan string)
   wg.Add(1)
   // Tom task
   go func() {
      for {
         w := <-chTom
         if w == "Hello Tom" {
            fmt.Println("Tom : Yeah, Hello Jerry.")
            chJerry <- "Hello Jerry"
         } else {
            fmt.Println("Tom : Nice day.")
            chJerry <- "Nice day"
            wg.Done()
         }
      }
   }()
   wg.Add(1)
   // Jerry task
   go func() {
      for {
         w := <-chJerry
         if w == "Hello Jerry" {
            fmt.Println("Jerry : Fine, Tom.")
            chTom <- "Fine Tom"
         } else {
            wg.Done()
         }
      }
   }()
   //fmt.Println("Jerry : Hello Tom.")
   //chTom <- "Hello Tom"
   fmt.Println("Tom : Hello Jerry.")
   chJerry <- "Hello Jerry"
   wg.Wait()
}

这是一个很简单的通过channel实现的go并发编程实例。

一开始定义了两个channel(消息)chTom和chJerry。然后通过Go关键词运行了两个协程(任务),分别代表Tom和Jerry,各自监听来自于channel中的消息,然后做出应答。

实例代码中还引入了一个WaitGroup对象wg,作用是控制主程序的退出时间。因为2个协程是并发运行的,并不会阻塞主程序,如果主程序运行马上结束,也会销毁主程序中所有的协程,这样就没法执行后续的Tom&Jerry互动了。wg.Wait()就是让主程序等待两个协程全部执行完成wg.Done(),然后再结束主程序。

再来看下两个代码的业务逻辑,不论是先给chTom,还是chJerry发送消息,Tom&Jerry都会接收到消息,然后针对不同的消息做出不一样的应答。这里Tom最多有2次应答,Jerry最多有一次应答,他们之间的互动就会结束。所以,整个过程是非常简单明了吧。

https://img1.sycdn.imooc.com//5b56c8f00001871d09600854.jpg

为什么Go程序更多建议用channel而不是共享变量来做协程间的数据传递呢?从上面的例子中我们也能看出,channel传递在代码逻辑上更加清晰,使用上也很简单,避免了共享变量的数据安全性问题,不用担心锁的使用。实例中的channel都是string类型,如果使用更加复杂的struct对象,那么传递的数据也可能是 map, [], chan 等,可以完成更多的互动功能。任务间协作这么简单,是不是也想动手试一试了。

欢迎关注实战课程《PHP秒杀系统 高并发高性能的极致挑战》

點(diǎn)擊查看更多內(nèi)容
9人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
全棧工程師
手記
粉絲
1.7萬
獲贊與收藏
2254

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消