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

解鎖即可觀看《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語言-switch語句

    與串聯的if語句類似,switch語句提供了一個多分支條件執行的方法。不過在這里用一個專有名詞來代表分支——case。每一個case可以攜帶一個表達式或一個類型說明符。前者又可被簡稱為case表達式。因此,Go語言的switch語句又分為表達式switch語句和類型switch語句。
  
    先說表達式switch語句。在此類switch語句中,每個case會攜帶一個表達式。與if語句中的條件表達式不同,這里的case表達式的結果類型并不一定是bool。不過,它們的結果類型需要與switch表達式的結果類型一致。所謂switch表達式是指switch語句中要被判定的那個表達式。switch語句會依據該表達式的結果與各個case表達式的結果是否相同來決定執行哪個分支。請看下面的示例:

var name string
// 省略若干條語句
switch name {
case "Golang":
    fmt.Println("A programming language from Google.")
case "Rust":
    fmt.Println("A programming language from Mozilla.")
default:
    fmt.Println("Unknown!")
}  

    可以看到,在上述switch語句中,name充當了switch表達式,而"Go""Rust"充當了case表達式。它們的結果類型是一致的,都是string。順便說一句,可以有只包含一個字面量或標識符的表達式。它們是最簡單的表達式,屬于基本表達式的一種。
  
    請大家注意switch語句的寫法。switch表達式必須緊隨switch關鍵字出現。在后面的花括號中,一個關鍵字case、case表達式、冒號以及后跟的若干條語句組成為一條case語句。在switch語句中可以有若干條case語句。Go語言會依照從上至下的順序對每一條case語句中case表達式進行求值。只要被發現其表達式與switch表達式的結果相同,該case語句就會被選中。它包含的那些語句就會被執行。而其余的case語句則會被忽略。
  
    switch語句中還可以存在一個特殊的case——default case。顧名思義,當沒有一個常規的case被選中的時候,default case就會被選中。上面示例中就存在一個default case。它由關鍵字default、冒號和后跟的一條語句組成。實際上,default case不一定被追加在最后。它可以是第一個case,或者出現在任意順位上。
  
    另外,與if語句一樣,switch語句還可以包含初始化子句,且其出現位置和寫法也如出一轍。如:

names := []string{"Golang", "Java", "Rust", "C"}
switch name := names[0]; name {
case "Golang":
    fmt.Println("A programming language from Google.")
case "Rust":
    fmt.Println("A programming language from Mozilla.")
default:
    fmt.Println("Unknown!")
}

    好了,我們已經對switch語句的一般形式——表達式switch語句——有所了解了。下面我們來說說類型switch語句。它與一般形式有兩點差別。第一點,緊隨case關鍵字的不是表達式,而是類型說明符。類型說明符由若干個類型字面量組成,且多個類型字面量之間由英文逗號分隔。第二點,它的switch表達式是非常特殊的。這種特殊的表達式也起到了類型斷言的作用,但其表現形式很特殊,如:v.(type),其中v必須代表一個接口類型的值。注意,該類表達式只能出現在類型switch語句中,且只能充當switch表達式。一個類型switch語句的示例如下:

v := 11
switch i := interface{}(v).(type) {
case int, int8, int16, int32, int64:
    fmt.Printf("A signed integer: %d. The type is %T. \n", i, i)
case uint, uint8, uint16, uint32, uint64:
    fmt.Printf("A unsigned integer: %d. The type is %T. \n", i, i)
default:
    fmt.Println("Unknown!")
}

    請注意,我們在這里把switch表達式的結果賦給了一個變量。如此一來,我們就可以在該switch語句中使用這個結果了。這段代碼被執行后,標準輸出上會打印出A signed integer: 11. The type is int.。
   
    最后,我們來說一下fallthrough。它既是一個關鍵字,又可以代表一條語句。fallthrough語句可被包含在表達式switch語句中的case語句中。它的作用是使控制權流轉到下一個case。不過要注意,fallthrough語句僅能作為case語句中的最后一條語句出現。并且,包含它的case語句不能是其所屬switch語句的最后一條case語句。

任務

請把命令源碼文件index.go的第 10、11 行的“?”都替換為相應的表達式,以保證該文件每次被運行后都會在標準輸出上打印出Case A。注意,第11行的“?”只能被替換成一個字面量。提示一下,表達式rand.Intn(4)結果會是一個范圍在[0,4)的隨機數。

?不會了怎么辦

第10的“?”可以被替換為%2,第11行的“?”可以被替換為int32rune。

||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

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

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

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

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

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

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

舉報

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

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?