Recuo no Go: tabulações ou espaços?

125

Existe um documento padrão das convenções de codificação do Google Go em algum lugar que defina se as guias ou os espaços são preferidos para a indentação no código-fonte do Go? Caso contrário, qual é a opção (estatisticamente) mais popular?

  1. Qual é a recomendação oficial? (caso existam)
  2. Qual é a escolha mais popular?
Erik Kaplun
fonte
2
medium.com/@hoffa/...
Brad Werth

Respostas:

195

A recomendação oficial é formatar seu código com

go fmt

ou usando o comando gofmt diretamente

gofmt -w .

Você pode ler mais sobre isso aqui no blog golang.org ou no documento go Effective :

Recuo
Usamos guias para recuo e o gofmt as emite por padrão. Use espaços apenas se for necessário.

ANisus
fonte
58
OK, então é tabs.
precisa saber é o seguinte
1
Sim, guias para recuo é a recomendação oficial. Você pode usar o recuo do espaço como o @Intermernet aponta, mas não é a recomendação.
ANisus
19
@ErikAllik, na verdade, a posição oficial não é "use tabs", mas "use go fmtno seu código antes de enviá-lo" (observe que também há gofmt). O que estou tentando entender é que o Go fez esse direito não apenas declarando uma política, mas adotando uma ferramenta que a aplica. Isso é incomum, então tente inclinar sua cabeça em torno dessa idéia e adote go fmt. Observe que existem até soluções automatizadas (por exemplo, o plug-in oficial Go para Vim suporta o :Fmtcomando IIRC).
Kostix
2
Acho que vale a pena notar que a adoção / exigência de uma ferramenta não interrompe todos os argumentos, mas significa que, em vez de as pessoas ficarem bravas com você por suas escolhas opinativas, as pessoas ficam bravas com você por aceitar a ferramenta (e pelos fabricantes de ferramentas para suas escolhas opinativas).
Mtraceur
22

EDIT 2: a resposta original na parte inferior agora está incorreta. A seção correta do arquivo de origem vinculado (atual 30/12/2019) é:

Formatos Gofmt Go programas. Ele usa guias para recuo e espaços em branco para alinhamento. O alinhamento pressupõe que um editor esteja usando uma fonte de largura fixa.

Agradecemos a TehSphinX por apontar isso!

TODAS AS INFORMAÇÕES ABAIXO DESTA LINHA ESTÃO INCORRETAS

EDIT: A resposta original na parte inferior agora está incorreta. A seção correta do arquivo de origem vinculado (atual 25/07/2014) é:

Formatos Gofmt Go programas.
Ele usa guias (largura = 8) para indentação e espaços em branco para alinhamento.

Resposta original (descontinuada):

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
fonte
4
-tabse -tabwidthse foram (e -commentsnão estão mais documentados, pelo menos; não olharam mais de perto) #
William William
2
@ Billisphere Obrigado, atualizei a resposta com a seção relevante do arquivo vinculado.
Intermernet
5
Quando você usa caracteres de tabulação, não existe o uso de uma largura de tabulação específica; portanto, a opção (anterior) de tabulação não tem efeito e a parte "width = 8" do texto atualizado deve ser removida. A largura da tabulação é configurada no visualizador Este erro também existe na fonte vinculada
thomasrutter
2
Isso está desatualizado. Não há mais menção de uma largura de tabulação na documentação do gofmtcomando. Foi removido aqui: github.com/golang/go/commit/…
TehSphinX