見出し画像

golang switchの使い方と注意点について

今回はswitchの使い方と注意点ついて紹介していきます。

switch

switch文は値に対して処理を分岐させることができます。if文でも同様の処理を行うことができますが、多くの分岐がある場合はswitch 文が使われることが多いです。


switchの使い方

switch文の基本的な使い方は以下になります。

switch x {
case 1:
    fmt.Println("xは1です")
case 2:
    fmt.Println("xは2です")
default:
    fmt.Println("xは1でも2でもありません")
}

case1にxの値が1のときに実行するコード、case2に値が2のときに実行するコード、どのcaseにも一致しない場合に実行するコードをdefaultに書きます。

caseには複数の値を指定することで、or条件にすることができます。

switch x {
case 1, 2, 3:
    fmt.Println("xは1、2、または3です")
case 4, 5, 6:
    fmt.Println("xは4、5、または6です")
default:
    fmt.Println("その他の値です")
}

他にも条件式を用いたcase文を書くこともできます。

switch {
case x < 5:
    fmt.Println("xは5未満です")
case x >= 5 && x < 10:
    fmt.Println("xは5以上10未満です")
default:
    fmt.Println("xは10以上です")
}


型スイッチ

Go言語のswitchでは変数の型に基づいて異なるアクションを実行する型スイッチを使うことができます。

var i interface{} = ...
switch v := i.(type) {
case int:
    fmt.Println("int型です:", v)
case string:
    fmt.Println("string型です:", v)
default:
    fmt.Println("不明な型です:", v)
}


fallthrough

Go言語のswitchは一つでもcase式に合致して処理を行ってしまえば、暗黙的にbreakが入ることでswitch処理を抜けるという言語仕様をしています。

break文が暗黙的に入るということはswitch文の中で複数のcase式に入ることができないと思ってしまいますが、その心配は要りません。

「fallthrough」をつかうことで、あるcase式が成立した後にでも次の節を実行してくれます。

switch x {
case 1:
    fmt.Println("xは1です")
    fallthrough
case 2:
    fmt.Println("または2です")
default:
    fmt.Println("1でも2でもありません")
}


golangの案件を探すならクラウドワークス テック

・97%がリモートのお仕事
・週4日、週3日OKのお仕事多数
・登録社数74万件業界トップクラス
・2〜4週間程度でお仕事決定
・案件提案から契約締結、勤怠管理もすべてオンライン完結
・継続率90%!一人ひとりをサポート
・参画後の評価で委託料が上がる認定パートナー制度
・簡単60秒で登録


switchの注意点

自動的なbreak

fallthroughの説明の際に少し触れましたが、switch文では、各caseブロックの最後に自動的にbreakが挿入されています。

CやJavaのような他の多くの言語と異なり、各caseの後に明示的にbreakを書く必要はありません。

switch x {
case 1:
    fmt.Println("xは1です")
    // ここで自動的にbreakされる
case 2:
    fmt.Println("xは2です")
    // ここも自動的にbreakされる
}


defaultの位置

defaultは最後に書くものと思い込んでしまいがちですが、実はswitch文のどこに書いても意図通りに動きます。
switch文は上から順に各caseを評価し、一致するものがなければdefaultが実行されます。

switch x {
case 1:
    fmt.Println("xは1です")
default:
    fmt.Println("xは1ではありません")
case 2:
    fmt.Println("xは2です")
}


スコープと変数宣言

switch文内で宣言された変数はそのswitchブロック内でしかアクセスすることができません。

switch x := someFunction(); x {
case 1:
    // xはこのブロック内で利用可能
    fmt.Println("xは1です", x)
default:
    // xはここでも利用可能
    fmt.Println("xは1ではありません", x)
}
// ここではxは利用不可能


golangをもっと詳しくなりたい方に

初めてのGo言語

Go言語の入門から応用まではこの一冊で網羅されています。説明も順序立てて説明されており完成度の高い参考書となっています。


詳解Go言語Webアプリケーション開発

こちらはGo言語の基礎知識を得たあとに読むことをすすめる本となっています。ハンズオン形式で手を動かしながら実装をしていくことができるため、実際の開発を意識しながらGo言語を学ぶことができます。

以下の記事では他にも筆者が実際に読んでおすすめしたい本をまとめています。


【Go入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)

まだGo言語の勉強を始めていない方、全くの初心者の方にはこちらのUdemy教材が最もおすすめです。

この教材ではgolangの基礎について網羅的に学ぶことができます。ただ見て学ぶだけでなく、講座の中でアプリ作成まで行うことで学んだことの理解をさらに深めることができます。


現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

個人的に最も勉強になったのは「現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発」という教材です。
本格的なレクチャーに入る前に、なぜGoなのか、なぜFintechなのかについて説明されていることで、Goの概念や意味について大枠から理解することができます。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?