メインコンテンツまでスキップ

go言語におけるtrailing comma(ケツカンマ)問題について

Sato Taichi

僕は、javascript における IE 対応で辛い思い出が沢山あるのでカンマの位置には神経質なのですけども皆様は如何でしょうか?

まずは、go 言語のリテラルに関する仕様とレキサーの仕様を確認しておいて下さい。

カンマをつけるべきか、つけざるべきか#

で、仕様書には特にケツカンマについて特筆されていないのですよね。

普通の配列リテラルを宣言するとこうなります。

a := []int{1, 2, 3}

このコードはケツカンマありでも文法的に正しいので、以下のコードは正しい。

a := []int{1, 2, 3, }

で、これをgo fmtするとケツカンマ無し状態になる。

所が、以下の様にリテラルを閉じる}の位置を改行するとコンパイラはエラーを出す様になります。

a := []int{1, 2, 3}
// syntax error: need trailing comma before newline in composite literal

つまり、改行するならケツカンマは必須だと言う訳です。

正しいコードは以下の様になります。

a := []int{1, 2, 3,}

面白いのはコンパイルエラーになるケツカンマの無いコードをgo fmtに食わせた時です。

missing ',' before newline in composite literal

分かってるならケツカンマ足して下さい。お願いします。