iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
Software Development

關於我轉生變成 Go 初學者的這檔事系列 第 20

Day20-[第十九站 : Go Switch ? 要玩遊戲 ?(一)]<GOO~

  • 分享至 

  • xImage
  •  

前言

在要開始這一站之前忽然想到朋友講的笑話,如果女巫掛掉的話就會變成什麼呢? 沒錯就是......Switch~! 哈哈..哈,算了我不是講冷笑話的料

在一個 3C 普及的時代就算是女巫還是需要用電腦的

開始

那我們這篇主要說明的就是 Switch 的薩爾達傳說:曠野之心速通方式(抱歉錯頻= =,回歸正題是 Go 語言中 Switch 的使用方式,那相信之前有用過其他語言像是 Java 或是 C 跟 C++ 都有 Switch,那 Switch 究竟是什麼呢?

Switch 介紹

Switch 簡單來說就是另外一種類似 if - else 的方式,它會先進行判斷之後,然後從判斷的結果A去對應相同結果A與之結果B並把B給印出,恩...這樣說好像又有點混亂,沒關係那我們用程式來說明以下先簡單介紹 Go Switch 的結構

switch expression(條件式) {
case x:
   // code block
case y:
   // code block
case z:
...
default:
   // code block
} 

我們看到最上那一個是條件式,那當條件式的判斷結果為以下 "case" 中的其中之一例如 y 好了,那它就會輸出 y 的結果出來,下面舉例來說

package main
import ("fmt")

func main() {
  day := 2

  switch day {
  case 1:
    fmt.Println("Monday")
  case 2:
    fmt.Println("Tuesday")
  case 3:
    fmt.Println("Wednesday")
  case 4:
    fmt.Println("Thursday")
  case 5:
    fmt.Println("Friday")
  case 6:
    fmt.Println("Saturday")
  case 7:
    fmt.Println("Sunday")
  default:
    fmt.Println("Not a weekday")
  }
}

由此可知,輸出結果會是
https://ithelp.ithome.com.tw/upload/images/20230930/20161224t4l7RgfURV.png

因為一開始我們就判斷 "day" 是數值 "2",然後我們在 "switch day" 中的 "case 2" 會印出 fmt.Println("Tuesday") 也就是 "Tuesday"

判斷型別

除了可以判斷整數外,Switch 還可以判斷型別也就是 type 如以下所示

package main
import ("fmt")
func main() {
  var v interface{}
  
  v = "Goood"
  
  switch v.(type) {
  case int:
    fmt.Println("v 是 int 型別")
  case string:
    fmt.Println("v 是 str 型別")
  default:
    fmt.Println("v 是未知型別")
  }
}

輸出結果就會是
https://ithelp.ithome.com.tw/upload/images/20230930/20161224YZmLVpMy5y.png

不只是這樣而已 Switch 還可以判斷很多東西,像是

  • 數值的大小
  • 字符串的內容
  • 布爾值的真假
  • 日期時間
  • 錯誤碼

真的是太酷辣!!!!!

注意事項

千萬不能這樣寫

package main
import ("fmt")

func main() {
  a := 3

  switch a {
  case 1:
    fmt.Println("a is one")
  case "b":
    fmt.Println("a is b")
  }
}

因為你的 a 已經確定型別是 "int" 了,然後你的 case b 的型別是 "str",這就會有型別上的錯誤,Go 的 Switch 語句要求 case 條件的值必須與 expression 的值具有相同的型別

題外話

程式語言界的巨頭之一中的 Python 其實是沒有 Switch 這種寫法方式,但是它們有另外一種也是類似的叫 match,不過是從 Python 3.10 開始才有這種寫法

結語&預告

當我回過神來發現自己好像分享太多了,完全沒講 Go 的 Switch 的特色,所以下一站我會跟大家分享 Go 的 Switch 的特色,非常抱歉 !!!

下一站~ 第二十站 : Go Switch ? 要玩遊戲 ?(二)

資料來源

Go Switch
https://www.w3schools.com/go/go_switch.php

圖片-女巫
https://www.pinterest.com/pin/604326843762879109/

Python 的 Switch
https://www.readfog.com/a/1630488642582581248


上一篇
Day19-[第十八站 : Go 你是while ? 還是 for ?]<GOO~
下一篇
Day20-[第十九站 : Go Switch ? 要玩遊戲 ?(二)]<GOO~
系列文
關於我轉生變成 Go 初學者的這檔事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言