LoginSignup
2
0

More than 5 years have passed since last update.

Goのfor文で複数の変数を同時に回す

Posted at

例えばC言語だと、iとjの2つの変数を操作しながらfor文を回すことができた。

#include <stdio.h>

int main(void) {
    int i, j;
    for (i = j = 0; i < 10 && j < 10; i++, j++) {
        printf("%d, %d\n", i, j);
    }
}

一方、Goのfor文は同じことができない。いくつか制限があるからだ。

  • 連続代入ができない。
  • assignment statementはstatementであって式ではない。
  • forのセミコロンの前(InitStmt)と最後(PostStmt)に書けるのはSimpleStmtだけであり、複数の文を書けない。

というわけで、複数代入を工夫をするとここまでできるけど、

package main

import "fmt"

func main() {
    for i, j := 0, 0; i < 10 && j < 10; i, j = i+1, j+1 {
        fmt.Println(i, j)
    }
}

この場合、i++j++は使えなかった。

複雑なことがしたかったら、forの前やforの中に書けばよい、という思想なのかもね。

ちなみにif文だと条件式の手前に別の文を置けるけど、、、

if err := doSomething(); err != nil {
  //...
}

実はこれはif文の特殊機能だった。あらゆる場所で使える機能ではない。
https://golang.org/ref/spec#If_statements

2
0
2

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
2
0