いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-647 (Goのswitch statementはcaseに複数の候補が指定できる)(multi case switch statement)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

結構長い間Go言語を使っているのですが、switchのcaseに複数の値を指定出来ることを知りませんでした(恥

てっきり、C言語とかと同じだと思ってた。。Tour of Goとかも multi case なサンプル書かれてなかったし、機能的に無いと思ってました。

言語仕様みたら、ちゃんと書いてありました。やっぱり、言語スペックは見ておかないと駄目ですねー。

go.dev

サンプル

main.go

package main

import (
    "log"
    "math/rand"
    "time"
)

var (
    rnd *rand.Rand
)

func init() {
    log.SetFlags(0)
    rnd = rand.New(rand.NewSource(time.Now().UnixNano()))
}

func main() {
    log.SetFlags(0)

    if err := run(); err != nil {
        panic(err)
    }
}

func run() error {
    var (
        v = (1 + rnd.Intn(10))
    )

    log.Printf("v=%d", v)

    //
    // Goの switch statement は case に複数の値を指定出来る
    // 複数指定する場合はカンマで並べる。
    //
    // REFERENCES:
    //   - https://go.dev/ref/spec#Switch_statements
    //   - https://www.w3schools.com/go/go_switch_multi.php
    //
    switch v {
    case 1, 2, 3:
        log.Printf("p1")
    case 4, 5:
        log.Printf("p2")
    case 6, 7, 8:
        log.Printf("p3")
    default:
        log.Printf("p4")
    }

    return nil
}

Taskfile.yml

# https://taskfile.dev

version: '3'

tasks:
  default:
    cmds:
      - go run .
    silent: true

実行

$ task
v=8
p3

参考情報

www.w3schools.com

個人的Goのおすすめ書籍

個人的に読んでとても勉強になった書籍さんたちです。


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。