Goのインデント:タブまたはスペース?


125

Goのソースコードのインデントにタブとスペースのどちらを使用するかを設定する標準のGoogle Goコーディング規約のドキュメントがどこかにありますか?そうでない場合、(統計的に)より人気のあるオプションは何ですか?

  1. 公式の推薦は何ですか?(存在する場合)
  2. より一般的な選択肢は何ですか?

回答:


195

公式の推奨事項は、コードをフォーマットすることです

go fmt

またはgofmtコマンドを直接使用する

gofmt -w .

あなたはそれについてもっと読むことができ、ここで golang.orgのブログ上の、またはから有効行く文書:

インデントインデントに
はタブを使用し、gofmtはデフォルトでタブを生成します。必要な場合にのみスペースを使用してください。


58
はい、タブです。
エリックカプルン2013

1
はい、インデント用のタブは公式の推奨事項です。あなたはできる @Intermernetが指摘するようにスペースのインデントを使用しますが、それはお勧めではありません。
ANisus 2013

19
@ErikAllik、実際には、公式の位置は「タブを使用する」ではなく、「go fmtコードを送信する前に使用する」です(もあることに注意してくださいgofmt)。私がストリートしようとしているのは、Go がポリシーを宣言するだけでなく、それを強制するツールを採用することによって、この権利を実現したということです。これは一般的ではないので、この考えに頭をかがめて採用するようにしてくださいgo fmt。自動化されたソリューションもあることに注意してください(たとえば、Vimの公式Goプラグインは:FmtコマンドIIRCをサポートしています)。
kostix 2013


2
ツールの採用/要求がすべての議論を止めるわけではないことは注目に値すると思いますが、それは、人々があなたの考え抜かれた選択についてあなたに怒るのではなく、ツールを受け入れることに対して人々があなたに怒ることを意味します彼らの考え抜かれた選択)。
mtraceur 2018

22

編集2:下部の元の答えは正しくありません。リンクされたソースファイルの正しいセクション(2019年12月30日現在)は次のとおりです。

GofmtはGoプログラムをフォーマットします。インデントにはタブを使用し、配置には空白を使用します。配置は、エディターが固定幅フォントを使用していることを前提としています。

これを指摘してくれたTehSphinXに感謝します!

この行の下にあるすべての情報は正しくありません

編集:下部にある元の答えは正しくありません。リンクされたソースファイルの正しいセクション(現在の25/07/2014)は次のとおりです。

GofmtはGoプログラムをフォーマットします。
インデントにはタブ(幅= 8)を使用し、位置合わせには空白を使用します。

元の回答(非推奨):

Formatting control flags:
    -comments=true
        Print comments; if false, all comments are elided from the output.
    -tabs=true
        Indent with tabs; if false, spaces are used instead.
    -tabwidth=8
        Tab width in spaces.

4
-tabsそして、-tabwidthされてなくなって(と-comments、より密接に見ていない、もはや、少なくとも文書化されていない)
ウィリアム・

2
@billisphereおかげで、リンクファイルの関連セクションで回答を更新しました。
Intermernet 2014

5
タブ文字を使用する場合、特定のタブ幅を使用するなどのことはないため、(以前の)tabwidthオプションは効果がなく、更新されたテキストの「width = 8」の部分を削除する必要があります。タブ幅はビューアで設定されます。このエラーは、リンクされたソースにも存在します
thomasrutter

2
これは時代遅れです。gofmtコマンドのドキュメントには、タブ幅についての記載はありません。ここは削除されました:github.com/golang/go/commit/...
TehSphinX
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.