switch文で条件に応じた処理を実行する
if文以外にも条件に応じて別の処理を実行する方法がある。今回はそのような用途で使うswitch文について学習する。
switch文を使用した条件ごとの処理
変数osの判定を行う。変数の値がmacのときはMAC!!と返し、windowsのときはWiindows!と非常時する。また、それ以外の場合はDefault!!と返す処理を作成したいときは以下のように書く
os := "mac"
switch os {
case "mac":
fmt.Println("MAC!!")
case "windows":
fmt.Println("Windows!!")
default:
fmt.Println("Default!!")
}
//MAC!!と出力される
defaultはどの条件に当てはまらなかった場合される処理だが、この記載は必須ではない。記載を行わず、どのcaseにも当てはまらない場合は何の処理も行われない。
変数宣言とswitch文をまとめて書く
if文同様変数への代入とswitch文はまとめて1行で記載することができる。
getOsNameという関数を作り、返り値として文字列のmacを返すとする。この関数の返り値を変数osに代入する場合を考える。
func getOsName() string {
return "mac"
}
func main() {
os := getOsName()
switch os {
case "mac":
fmt.Println("MAC!!")
case "windows":
fmt.Println("Windows!!")
default:
fmt.Println("Default!!")
}
}
//MAC!!と出力される
switch文以降で変数osを使わない場合は、変数への代入とswitch文を1行で書く。以下コードでは、switch文の後ろで変数に値を代入し、;でつなげてswitch文が判断する変数(os)を記載している
func getOsName() string {
return "mac"
}
func main() {
switch os := getOsName(); os {
case "mac":
fmt.Println("MAC!!")
case "windows":
fmt.Println("Windows!!")
default:
fmt.Println("Default!!")
}
}
//MAC!!と出力される
caseに条件式を書くパターン
timeパッケージを使用して、現在の時間を扱うtime.Nowという関数を使ってみる。
import (
"fmt"
"time"
)
func main () {
t := time.Now()
fmt.Println(t.Hour())
}
//実行したときの現在時間が表示される。
例として11が表示されることとする
今までは変数osをswitchの条件式として書いていたが、今回は書かない。
1つ目のケースとして、Hourで取得した時刻が12時よりも前だった場合Morningを出力し、2つ目のケースとして17時よりも後だったらAfternoonを出力するような処理を書こうとすると以下のようになる。
t := time.Now()
fmt.Println(t.Hour())
switch {
case t.Hour()< 12:
fmt.Println("Morning")
case t.Hour()> 17:
fmt.Println("Afternoon")
}
//
11
Morning
と表示される
switch文に条件式を書かずに、caseに判定条件を書く、というパターンもあるということを抑える。
学習に使用した教材
・『入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)』M.A EduTech
https://www.udemy.com/course/golang-webgosql/?utm_medium=udemyads&utm_source=bene-msa&utm_campaign=responsive&utm_content=top-1&utm_term=general&msclkid=81e2f24a32cc185d275d953d60760226&couponCode=NEWYEARCAREERJP
・『シリコンバレー一流プログラマーが教える Goプロフェッショナル大全』酒井 潤 (著)
https://www.amazon.co.jp/%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E4%B8%80%E6%B5%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Go%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%A4%A7%E5%85%A8-%E9%85%92%E4%BA%95-%E6%BD%A4/dp/4046070897