Como formatar o Go Source para um código consistente mais limpo

Como formatar o Go Source para um código consistente mais limpo

Formatar seu código é uma maneira importante de aprimorar sua legibilidade, consistência e reutilização. Código formatado corretamente é mais fácil de entender, modificar e manter.

Um dos grandes recursos do Go são suas convenções de formatação bem definidas. Você pode usar o pacote de formatação integrado e o comando go fmt para formatar automaticamente seu código. Isso ajudará a garantir que outros programadores Go possam lê-lo o mais facilmente possível.

O pacote de formatos e o comando fmt

O pacote de formato implementa a formatação padrão para o código-fonte Go. O pacote interopera com a ferramenta de linha de comando go format para flexibilidade na formatação do código Go.

O pacote format é um submódulo do pacote go. Veja como você pode importá-lo:

import "go/format"

Você pode navegar na documentação do comando go fmt especificando o comando help antes do comando fmt :

go help fmt

Especifique um nome de arquivo após o comando fmt para formatar esse arquivo. Isso ajustará o espaço em branco e o recuo do seu código para estar em conformidade com os padrões do Go.

go fmt main.go

Nos bastidores, go fmt é um alias para o comando gofmt, especificamente:

gofmt -l -w

Esses sinalizadores fazem com que o gofmt grave quaisquer alterações em cada arquivo fornecido e liste os nomes dos arquivos que ele altera.

Você pode adicionar o sinalizador -x ao comando fmt. O sinalizador -x ajuda a gravar alterações do formatador no arquivo original.

go fmt -x main.go

O sinalizador -n funciona de maneira semelhante a -x, mas não faz alterações. Em vez disso, ele exibe os comandos que o go fmt executaria sem o -n:

go fmt -n main.go

O sinalizador informa ao formatador para mostrar as alterações, o que permite revisá-las antes de aplicá-las.

Aqui está um programa Go simples que percorre inteiros de zero a cinco e imprime a string “Hello World!”.

// formatting a file named main.go as shown in the example above

package main
import "fmt"
func main() {
  var x int=5
  for i:=0;i<x;i++{
    fmt.Println("Hello World!")
  }
}

Formatando o código-fonte do Go

O pacote de formato contém uma função Source para formatar arquivos Go de programas. Você terá que ler o arquivo e passar o conteúdo como argumentos para a função Source.

A função Source retornará o conteúdo do arquivo formatado que você pode gravar no arquivo ou em um novo.

Você pode ler arquivos com a função ReadFile do pacote ioutil . A função ReadFile recebe o nome do arquivo e retorna o conteúdo do arquivo e um erro de manipulação.

fileContent, err: = ioutil.ReadFile("main.go")

if err! = nil {
  log.Fatalln("There was an error reading the file", err)
}

Passar o conteúdo do arquivo para a função Source retorna o conteúdo do arquivo formatado e um erro de manipulação.

formatted, err: = format.Source(fileContent)

if err! = nil {
  log.Fatalln("There was a formatting error with the source function", err)
}

Você pode gravar o conteúdo do arquivo formatado no arquivo com a função WriteFile do pacote ioutil . A função WriteFile assume o nome do arquivo, o conteúdo e o modo de permissão do arquivo, retornando qualquer erro. O modo de permissão só é relevante se o arquivo não existir, caso em que WriteFile o criará.

O modo de permissão de arquivo 0644 fornece:

  • As permissões de leitura e gravação do proprietário do arquivo.
  • Permissões de leitura para outros usuários no mesmo grupo que o proprietário.
  • Sem permissões para outros usuários.

err = ioutil.WriteFile("main.go", formatted, 0644)

if err! = nil {
  log.Fatalln("There was an error writing the file", err)
}

Como alternativa, você pode passar o código-fonte Go para a função Source para formatação. Você pode especificar o código em uma fatia de byte usando ticks ( ` ):

package main

import (
  "fmt"
  "go/format"
)

func main() {
  // simple program that calculates the area of a triangle with the math
  // function
  formatted, err: = format.Source([]byte(`
package main
import(
  "fmt"
  "math"
)
func main(){
var a float64=3
var b float64=4
var c float64=5
var s float64=(a+b+c)/2
var area float64=math.Sqrt(s*(s-a)*(s-b)*(s-c))
fmt.Println("The area of the triangle is: ",area)
}
`))

  if err! = nil {
    log.Fatalln("There was a formatting error with the source function", err)
  } else {
    fmt.Println(string(formatted))
  }
}

Na formatação, você precisará converter a fatia de byte em string com a função string . Aqui está o código-fonte formatado.

resultado de uma operação de formato

Personalizando o processo de formatação

Você pode personalizar o processo de formatação com a estrutura de configuração do pacote de formatos . A estrutura Config contém campos onde você pode especificar opções de formato na instanciação.

import "go/format"

config: = &format.Config{
  // Tabwidth sets the number of spaces per tab.
  Tabwidth: 8,

  // UseTabs indicates whether the formatter should use tabs instead of
  // spaces.
  UseTabs: false,

  // TabIndent is used to determine if the initial indentation should be
  // done using tabs or spaces.
  TabIndent: true,

  // NoFinalTab specifies whether a final tab should be removed from
  // lines before they are formatted.
  NoFinalTab: true,

  // Spaces specifies whether spaces should be used for alignment.
  Spaces: true,

  // NoTrimTrailingSpace specifies whether trailing white space should
  // be trimmed from lines before they are formatted.
  NoTrimTrailingSpace: false,
}

Você pode usar os campos para personalizar o comportamento do seu formatador definindo as opções com base em seus requisitos.

Você pode usar o método Source dessa estrutura para formatar uma fatia de byte com base em sua configuração.

func main() {
  fileContent, err: = ioutil.ReadFile("main.go")

  // note that this is a Source method of the `config` type, not from the
  // `format` package itself although the functionality is the same, you'll
  // need to adhere to this if you need to configure the formatter
  formatted, err: = config.Source(fileContent)

  if err! = nil {
    log.Fatalln("There was a formatting error with the config type", err)
  }

  ioutil.WriteFile("main.go", formatted, 0644)
}

Chamar a função config.Source() dessa forma formata o conteúdo do arquivo main.go usando as opções de configuração. Ele retorna o conteúdo formatado como uma fatia de byte e um erro.

Você pode formatar e manipular string em Go

O pacote format e o comando go fmt podem ajudá-lo a automatizar o processo de formatação do código.

Go também fornece um pacote fmt para formatação de strings e um pacote de strings para manipulação de strings.

O pacote fmt implementa E/S formatada mais simples com funções análogas às funções printf e scanf do C. A função strings implementa funções simples para manipular strings codificadas em UTF-8.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *