Go言語入門 vol.2 – gofmt と go fmt について –

※Go言語入門のindexページはこちら

こんにちは。オガリア開発チームの粂です。

引き続き、Goについて調べたことをブログに書くのシリーズです。

今回は gofmt と go fmt についてです。

Goのバージョン:1.1.2

Go言語の魅力のひとつに標準でフォーマット用のコマンドが用意されていることが挙げられると思うのですが、細かいオプションがいくつかあるので、それらを見ていきたいと思います。

gofmtについて

$ gofmt

ファイルもディレクトリも何も指定しなかった場合は標準入力からフォーマット対象のコードを受け付けます。あまり使わない気がします。

$ gofmt sample.go

カレントディレクトリのsample.goをフォーマットした結果を標準出力に表示します。

$ gofmt sample/

sampleディレクトリ以下の.goファイルを再帰的にすべてフォーマットした結果を標準出力に表示します。その際にドットで始まるファイルは無視されます。

$ gofmt -d sample.go

カレントディレクトリのsample.goをフォーマットした結果の差異を標準出力に表示します。フォーマットされたソースコードは表示しません。内部的にdiffコマンドを使っているようです。

$ gofmt -l sample.go

カレントディレクトリのsample.goをフォーマットした結果、差異があったファイル名を標準出力に表示します。フォーマットされたソースコードは表示しません。

$ gofmt -w sample.go

カレントディレクトリのsample.goをフォーマットして元のファイルをフォーマットされたソースコードで上書きします。フォーマットされたソースコードは表示しません。

あと、-e と -r と -s っていうのがあるのですが、いまいち利用方法がわかりません。わかったら追記します。

$ gofmt -comments=false sample.go

フォーマットする際にコメントを除去します。元のコメント行自体は空行として残るようです。デフォルトはtrueです。

$ gofmt -tabs=false -tabwidth=4 sample.go

フォーマットする際にインデントにタブを使わずにスペースを使います。上記の場合はスペース4つでインデントします。tabwidthを指定しなかった場合は8が指定されるようです。デフォルトはtrueでインデントはハードタブです。

go fmt について

go fmt は gofmt -l -w を実行することとイコールになります。つまり、フォーマットした内容を上書きしつつ、フォーマットして差異のあったファイル名を標準出力に表示します。

また、go fmt には -n と -x の2つのオプションがありますが、-n のほうが実行されるであろうコマンドの表示、-x が実際に実行されたコマンドの表示になります。

つまり、go fmtを実行した結果何も変わらないのであれば -n ではコマンドが表示されますが、-x では何も表示されません。

参考サイト
http://golang.org/cmd/gofmt/
http://golang.org/cmd/go/#hdr-Run_gofmt_on_package_sources

次回はまた標準ライブラリの調査に戻ります。

最後までお読みいただきありがとうございました!

Pocket