Indentasi di Go: tab atau spasi?

125

Apakah ada dokumen konvensi pengkodean Google Go standar di suatu tempat yang mengatur apakah tab atau spasi lebih disukai untuk indentasi dalam kode sumber Go? Jika tidak, apa pilihan (secara statistik) yang lebih populer?

  1. Apa rekomendasi resminya? (jika ada)
  2. Apa pilihan yang lebih populer?
Erik Kaplun
sumber
2
medium.com/@hoffa/…
Brad Werth

Jawaban:

195

Rekomendasi resmi adalah memformat kode Anda dengan

go fmt

atau menggunakan perintah gofmt secara langsung

gofmt -w .

Anda dapat membacanya lebih lanjut di sini di blog golang.org, atau dari dokumen Effective go :

Indentasi
Kami menggunakan tab untuk indentasi dan gofmt memancarkannya secara default. Gunakan spasi hanya jika Anda harus.

ANisus
sumber
59
OK, jadi tab itu.
Erik Kaplun
1
Ya, tab untuk indentasi adalah rekomendasi resmi. Anda dapat menggunakan indentasi spasi seperti yang ditunjukkan @Intermernet, tetapi itu bukan rekomendasi.
ANisus
19
@ErikAllik, sebenarnya, posisi resminya bukanlah "gunakan tab" melainkan "gunakan go fmtkode Anda sebelum mengirimkannya" (perhatikan juga ada gofmt). Apa yang saya coba lakukan adalah bahwa Go melakukan ini dengan benar tidak hanya dengan mendeklarasikan kebijakan tetapi dengan mengadopsi alat yang memberlakukannya. Ini jarang terjadi, jadi cobalah menundukkan kepala Anda untuk memikirkan ide ini dan mengadopsi go fmt. Perhatikan bahwa bahkan ada solusi otomatis (misalnya, plugin Go resmi untuk Vim mendukung :Fmtperintah, IIRC).
kostix
2
Saya pikir perlu dicatat bahwa mengadopsi / membutuhkan alat tidak menghentikan semua argumen, tetapi itu berarti bahwa alih-alih orang marah pada Anda karena pilihan opini Anda, orang marah pada Anda karena menerima alat (dan pada pembuat alat untuk pilihan opini mereka).
mtraceur
22

EDIT 2: dia jawaban asli di bagian bawah sekarang salah. Bagian yang benar dari file sumber tertaut (saat ini 30/12/2019) adalah:

Gofmt memformat program Go. Ini menggunakan tab untuk indentasi dan kosong untuk penyelarasan. Perataan mengasumsikan bahwa editor menggunakan font dengan lebar tetap.

Terima kasih kepada TehSphinX karena telah menunjukkan hal ini!

SEMUA INFO DI BAWAH BARIS INI SEKARANG TIDAK BENAR

EDIT: Jawaban asli di bagian bawah sekarang salah. Bagian yang benar dari file sumber tertaut (25/07/2014 saat ini) adalah:

Gofmt memformat program Go.
Ini menggunakan tab (lebar = 8) untuk indentasi dan kosong untuk perataan.

Jawaban asli (tidak digunakan lagi):

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.
Intermernet
sumber
4
-tabsdan -tabwidthyang hilang (dan -commentstidak lagi mendokumentasikan sedikitnya; belum melihat lebih dekat)
William
2
@billisphere Terima kasih, saya telah memperbarui jawabannya dengan bagian yang relevan dari file yang ditautkan.
Intermernet
5
Saat Anda menggunakan karakter tab, tidak ada yang namanya menggunakan lebar tab tertentu, sehingga opsi tabwidth (sebelumnya) tidak berpengaruh dan bagian "width = 8" dari teks yang diperbarui harus dihapus. Lebar tab dikonfigurasi di penampil Kesalahan ini juga ada di sumber tertaut.
thomasrutter
2
Ini sudah ketinggalan zaman. Tabwidth tidak lagi disebutkan dalam dokumentasi gofmtperintah. Ini telah dihapus di sini: github.com/golang/go/commit/…
TehSphinX