ゴルフの紹介
Go 言語の開発チームは、統一された公式コード スタイルを策定し、開発者がコードを統一スタイルにフォーマットできるようにする gofmt ツール (gofmt または go fmt) を起動しました。
gofmt は、最初に標準入力を読み取る cli プログラムです。ファイル パスが渡されると、ファイルがフォーマットされます。ディレクトリが渡されると、ディレクトリ内のすべての .go ファイルがフォーマットされます。パラメータが渡されない場合は、現在のディレクトリ内のすべての .go ファイルをフォーマットします。
gofmt はデフォルトではコードを簡素化しません。 -s
パラメータを使用してコード簡略化機能を有効にします。具体的には、次の変換が実行されます。
1) 配列、スライス、マップの初期化時に不要な型宣言を削除します。
次の形式のスライス式:
[]T{T{}, T{}}
簡略化されたコードは次のとおりです。
[]T{{}, {}}
2) 配列スライス操作における不要なインデックス指定を削除する
次の形式のスライス式:
s[a:len(s)]
簡略化されたコードは次のとおりです。
s[a:]
3) ループ中の不要な変数割り当てを削除します。
次の形式のループ:
for x, _ = range v {…}
簡略化されたコードは次のとおりです。
for x = range v {…}
次の形式のループ:
for _ = range v {…}
簡略化されたコードは次のとおりです。
for range v {…}
gofmt コマンドのパラメータを次の表に示します。
タグ名 | タグの説明 |
---|---|
-l | 形式仕様に準拠しておらず、コマンド プログラムによって書き換える必要があるソース コード ファイルの絶対パスのみを標準出力に出力します。書き換えられたすべてのコンテンツを標準出力に出力するのではなく。 |
-w | 結果を標準出力に出力するのではなく、書き換えたコンテンツをファイルに直接書き込みます。 |
-r | 「a[b:len(a)] -> a[b:]」という形式の書き換えルールを追加します。追加の書式設定ルールをカスタマイズする必要がある場合は、それを使用する必要があります。 |
-s | ファイル内のコードを簡略化します。 |
-d | その結果、書き換え前後の内容の比較情報のみが標準出力に出力されます。書き換えられたすべてのコンテンツを標準出力に出力するのではなく。 コマンド プログラムは diff コマンドを使用して内容を比較します。 Windows オペレーティング システムでは diff コマンドが存在しない可能性があるため、別途インストールする必要があります。 |
-e | すべての構文エラーを標準出力に出力します。このフラグを使用しない場合、各行の最初のエラーと最初の 10 個のエラーのみが出力されます。 |
-command | ソースコードファイル内のコメントを保持するかどうか。デフォルトでは、このフラグは true の値で暗黙的に使用されます。 |
-tabs | このフラグは、コード内のインデントに使用されるスペースの数を設定するために使用されます。デフォルト値は 8 です。このフラグを機能させるには、「-tabs」フラグを使用して値を false に設定します。 |
-tab | インデントにスペースの代わりにタブ (‘\t’) を使用するかどうか。デフォルトでは、このフラグは true の値で暗黙的に使用されます。 |
-cpuprofile | CPU 使用率のログを有効にし、ログの内容をこのタグ値が指すファイルに保存するかどうか。 |
gofmt コマンドはカスタム書き換えルールもサポートしており、 -r
パラメーターを使用して、パターン -> 置換の形式でルールを渡していることがわかります。
[例] main.goファイルには、以下の内容のGolangプログラムが格納されています。
package main
import "fmt"
func main() {
a := 1
b := 2
c := a + b
fmt.Println(c)
}
上記のコードをフォーマットするには、次のルールを使用します。
gofmt -w -r “a + b -> b + a” main.go
整形した結果は以下の通りです。
package main
import "fmt"
func main() {
a := 1
b := 2
c := b + a
fmt.Println(c)
}
注: gofmt はインデントを表すためにタブを使用し、行幅に制限はありません。コードを手動で折り返す場合、gofmt はコードのフォーマットを強制的に 1 行に戻すことはありません。
行って、行って、行ってください
gofmt は独立した cli プログラムであり、gofmt の簡易パッケージである Go 言語のgo fmt
go fmt
があります。
go help fmt
usage: go fmt [-n] [-x] [packages]
Fmt runs the command ‘gofmt -l -w’ on the packages named
by the import paths. It prints the names of the files that are modified.
For more about gofmt, see ‘go doc cmd/gofmt’.
For more about specifying packages, see ‘go help packages’.
The -n flag prints commands that would be executed.
The -x flag prints commands as they are executed.
To run gofmt with specific options, run gofmt itself.
See also: go fix, go vet.
go fmt
コマンド自体には、オプションのパラメーター-n
と-x
の 2 つだけがあります。
-n
内部で実行されるgo fmt
コマンドのみを出力します。-x
コマンドはgo fmt
コマンドを出力するだけでなく実行も行いますが、より詳細な設定が必要な場合は gofmt コマンドを直接実行する必要があります。
go fmt
gofmt を呼び出すときに-l -w
パラメータを追加します。これはgofmt -l -w
を実行するのと同じです。