Go のセミコロンの扱いが変わった。
09/12/22にリリースされたバージョンで、セミコロンの扱いが変わった。
今までは、セミコロンは、ブロックの末尾と、括弧の後だけ省略OKだったんだけど、
それが、セミコロンなしでもOKになった。*1
大元は、golang-nutsに投稿された以下の提案みたい。
http://groups.google.com/group/golang-nuts/browse_thread/thread/5ee32b588d10f2e9
セミコロン打たなくていいのは、かなりいい感じ。
スムースにかける。
コーディングが早くなる感じがする。
けど、上記のURLでも指摘されているけど、複数行に渡る式で演算子を前置するフォーマットがエラーになるのが、あぅー。
// この書き方はeエラー foo := f1() + f2() + f3() // こう書くのが正解 foo := f1() + f2() + f3()
演算子が前置の方が、自分は見やすいと思っているで、ちょっとなーという感じ。
セミコロンがないから、上の書き方がエラーになるのかと思いきや、セミコロンをつけても、エラー。
なので、以前のバージョンで書いたコードで、前置の演算子があるやつは軒並みコンパイルエラーになる。
そういう人の為に(だと思うけど)、gofmt を -oldparsers オプションを指定して、昔のコードを通すと、セミコロンなしのコードに変換してくれる。
例えば、以下の以前のコンパイラだと問題ないコードを
package main import "fmt" func f1() int { return 1 } func f2() int { return 1 } func f3() int { return 1 } func main() { foo := f1() + f2() + f3(); fmt.Println(foo) }
gofmt -oldparser を通すと、ご丁寧に、演算子を後置してくれる。
package main import "fmt" func f1() int { return 1 } func f2() int { return 1 } func f3() int { return 1 } func main() { foo := f1() + f2() + f3() fmt.Println(foo) }