go言語学習雑記2


go言語の勉強雑記その2
今回は文法

for文

goの言語は他の言語と比べて非常に柔軟性があります。
まずは普通のfor文

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

この条件式をいじるとwhile文のような挙動を実現できます


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

これで条件式を満たさなくなるまで処理を続けます。

さらにいじると無限ループができます。

  for {}

if文

 if x>0 {}

シンプルにifを書くだけ、 但し評価を()でくくる必要はないです

また、その場で変数を代入して比較を行うこともできます


if i:=3; i<4 {
  // 処理 
}

switch文

switch文は評価される変数を省略できる。

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

なおbreakは自動で挿入されるため書く必要はない

defer文

関数の呼び出し順序を操作する文法。

defer文に実行したい関数を渡すと、呼び出し元の処理が終わった段階で実行される。

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

main関数が終了した時点で defer文の関数が実行されるため出力される文字列は

hello
world

になる。

deferはstackで実行する関数の順番を操作するので、

    fmt.Println("counting")

    for i := 0; i < 10; i++ {
        defer fmt.Println(i)
    }

    fmt.Println("done")

上記の場合は

counting 9 8 7 6 5 4 3 2 1 0 done

となります。
stack は LIFO になるので、入れた順番とは逆の順番で出力されるので、上記のような結果になります。

最後に

defer文の使いどきがわからない。下手に使うと可読性が落ちそうなのでチーム開発でのルール決めの難しいそう。