A Tour of Go - Flow control statements 自分用リファレンスメモ

個人開発したアプリの宣伝
目的地が設定できる手帳のような使い心地のTODOアプリを公開しています。
Todo with Location

Todo with Location

  • Yoshiko Ichikawa
  • Productivity
  • Free

For

sum := 0
for i := 0; i < 10; i++ {
    sum += i
}

while的な記述

sum := 1
for sum < 1000 {
    sum += sum
}

If

括弧 ( ) は不要。

if x < 0 {
    fmt.Println(x)
}else{
    fmt.Println(x)
}
If with a short statement

ifの評価前にステートメントを記述できる。

またこのステートメントで宣言された変数はif内のみのスコープとなr。

if v := math.Pow(x, n); v < lim {
    fmt.Println(v)
}

Switch

breakは不要。上から下へcaseを評価し、条件に合ったcaseで自動的にbreakする。以降の全ての case は実行されない。

switch os := runtime.GOOS; os {
case "darwin":
    fmt.Println("OS X.")
case "linux":
    fmt.Println("Linux.")
default:
    fmt.Printf("%s.", os)
}
Switch with no condition

Switchに与える条件を省略するとtrueが条件となる。

switch {
case t.Hour() < 12:
    fmt.Println("Good morning!")
case t.Hour() < 17:
    fmt.Println("Good afternoon.")
default:
    fmt.Println("Good evening.")
}

Defer

deferへ渡した関数は、呼び出し元がreturnするまで実行を遅延させる。

// hello world
func main() {
    defer fmt.Println("world")
    fmt.Println("hello")
}

deferへ複数渡した場合はlast-in-first-outで実行される。

//done 9 8 7 6 ...
func main() {
    fmt.Println("counting")
    for i := 0; i < 10; i++ {
        defer fmt.Println(i)
    }
    fmt.Println("done")
}