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

解鎖即可觀看《Go開發工程師》完整課程視頻

Go開發工程師

未來3-5年企業高性能項目不可替代的語言,從基礎到項目實戰再到重構,真正從入門到精通

【第1周】Go基礎知識入門
【第2周】容器,go編程思想
【第3周】Go并發編程和工程管理
【第4周】從0開始理解rpc和grpc
【第5周】grpc和protobuf進階
【第6周】 yapi文檔管理、gorm詳解
【第7周】gin快速入門
【第8周】用戶服務的grpc服務
【第9周】用戶服務的web服務
【第10周】服務注冊/發現、配置中心、負載均衡
【第11周】商品微服務的grpc服務
【第12周】 商品微服務的gin層和oss圖片服務
【第13周】庫存服務和分布式鎖
【第14周】訂單和購物車微服務
【第15周】 支付寶支付、用戶操作微服務、前后端聯調
【第16周】elasticsearch實現搜索微服務
【第17周】 分布式理論基礎、分布式事務解決方案
【第18周】 學習rocketmq實現冪等性機制等
【第19周】鏈路追蹤、限流、熔斷、降級
【第20周】api網關、部署
【第21周】開發規范和go基礎擴展
【第22周】設計模式和單元測試
【第23周】protoc插件開發、cobra命令行
【第24周】log日志包設計
【第25周】ast代碼生成工具開發
【第26周】三層代碼結構
【第27周】grpc服務封裝更方便的rpc服務
【第28周】深入grpc的服務注冊、負載均衡原理
【第29周】基于gin封裝api服務
【第30周】可觀測的終極解決方案
【第31周】系統監控核心
【第32周】用戶、商品服務重構
【第33周】訂單、庫存等服務重構
【第33+周】訂單服務重構、wire進行ioc控制
【第34周】通過k8s部署服務
【第34+周】devops和k8s
章節
問答
課簽
筆記
評論
占位
占位

Go語言-select語句

    select語句屬于條件分支流程控制方法,不過它只能用于通道。它可以包含若干條case語句,并根據條件選擇其中的一個執行。進一步說,select語句中的case關鍵字只能后跟用于通道的發送操作的表達式以及接收操作的表達式或語句。示例如下:

ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
// 省略若干條語句
select {
case e1 := <-ch1:
    fmt.Printf("1th case is selected. e1=%v.\n", e1)
case e2 := <-ch2:
    fmt.Printf("2th case is selected. e2=%v.\n", e2)
default:
    fmt.Println("No data!")
} 

    如果該select語句被執行時通道ch1ch2中都沒有任何數據,那么肯定只有default case會被執行。但是,只要有一個通道在當時有數據就不會輪到default case執行了。顯然,對于包含通道接收操作的case來講,其執行條件就是通道中存在數據(或者說通道未空)。如果在當時有數據的通道多于一個,那么Go語言會通過一種偽隨機的算法來決定哪一個case將被執行。
   
   另一方面,對于包含通道發送操作的case來講,其執行條件就是通道中至少還能緩沖一個數據(或者說通道未滿)。類似的,當有多個case中的通道未滿時,它們會被隨機選擇。請看下面的示例:

ch3 := make(chan int, 100)
// 省略若干條語句
select {
case ch3 <- 1:
    fmt.Printf("Sent %d\n", 1)
case ch3 <- 2:
    fmt.Printf("Sent %d\n", 2)
default:
    fmt.Println("Full channel!")
}

    該條select語句的兩個case中包含的都是針對通道ch3的發送操作。如果我們把這條語句置于一個循環中,那么就相當于用有限范圍的隨機整數集合去填滿一個通道。
   
    請注意,如果一條select語句中不存在default case, 并且在被執行時其中的所有case都不滿足執行條件,那么它的執行將會被阻塞!當前流程的進行也會因此而停滯。直到其中一個case滿足了執行條件,執行才會繼續。我們一直在說case執行條件的滿足與否取決于其操作的通道在當時的狀態。這里特別強調一點,即:未被初始化的通道會使操作它的case永遠滿足不了執行條件。對于針對它的發送操作和接收操作來說都是如此。
  
    最后提一句,break語句也可以被包含在select語句中的case語句中。它的作用是立即結束當前的select語句的執行,不論其所屬的case語句中是否還有未被執行的語句。

任務

在命令源碼文件index.go的第 15 行和第 18 行添加一條語句,使該文件被執行時會在標準輸出上打印出:

No Data!
1
End.
?不會了怎么辦

在第15行添加

close(ch4)    

在第18行添加

ch4 <- 1
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

0/150
提交
取消
全部 精華 我要發布
全部 我要發布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?