1
0

More than 3 years have passed since last update.

go言語学習雑記2

Posted at

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文の使いどきがわからない。下手に使うと可読性が落ちそうなのでチーム開発でのルール決めの難しいそう。

1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0