Cómo formatear Go Source para obtener un código coherente más limpio

Cómo formatear Go Source para obtener un código coherente más limpio

Formatear su código es una forma importante de mejorar su legibilidad, consistencia y reutilización. El código con el formato adecuado es más fácil de entender, modificar y mantener.

Una de las grandes características de Go son sus convenciones de formato bien definidas. Puede usar el paquete de formato incorporado y el comando go fmt para formatear automáticamente su código. Esto ayudará a garantizar que otros programadores de Go puedan leerlo con la mayor facilidad posible.

El paquete de formato y el comando fmt

El paquete de formato implementa el formato estándar para el código fuente de Go. El paquete interactúa con la herramienta de línea de comandos de formato go para brindar flexibilidad en el formato del código Go.

El paquete format es un submódulo en el paquete go. Así es como puedes importarlo:

import "go/format"

Puede examinar la documentación del comando go fmt especificando el comando de ayuda antes del comando fmt :

go help fmt

Especifique un nombre de archivo después del comando fmt para formatear ese archivo. Esto ajustará el espacio en blanco y la sangría de su código para cumplir con los estándares de Go.

go fmt main.go

Detrás de escena, go fmt es un alias para el comando gofmt, específicamente:

gofmt -l -w

Esas banderas hacen que gofmt escriba cualquier cambio en cada archivo que proporcione y enumere los nombres de los archivos que cambia.

Puede agregar el indicador -x al comando fmt. El indicador -x ayuda a escribir los cambios del formateador en el archivo original.

go fmt -x main.go

El indicador -n funciona de manera similar a -x, pero no realiza cambios. En su lugar, muestra los comandos que go fmt se ejecutarían sin -n:

go fmt -n main.go

La bandera le dice al formateador que muestre los cambios, lo que le permite revisarlos antes de aplicarlos.

Aquí hay un programa Go simple que recorre números enteros de cero a cinco e imprime la cadena «¡Hola mundo!».

// 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!")
  }
}

Formateo del código fuente de Go

El paquete de formato contiene una función Fuente para formatear archivos Go desde programas. Deberá leer el archivo y pasar el contenido como argumentos a la función Fuente.

La función Fuente devolverá el contenido del archivo formateado que puede escribir en el archivo o en uno nuevo.

Puede leer archivos con la función ReadFile del paquete ioutil . La función ReadFile toma el nombre del archivo y devuelve el contenido del archivo y un error para su manejo.

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

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

Pasar el contenido del archivo a la función Fuente devuelve el contenido del archivo formateado y un error de manejo.

formatted, err: = format.Source(fileContent)

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

Puede escribir el contenido del archivo formateado en el archivo con la función WriteFile del paquete ioutil . La función WriteFile toma el nombre del archivo, el contenido y el modo de permiso del archivo, y devuelve cualquier error. El modo de permiso solo es relevante si el archivo no existe, en cuyo caso WriteFile lo creará.

El modo de permiso de archivo 0644 da:

  • El propietario del archivo tiene permisos de lectura y escritura.
  • Leer permisos a otros usuarios del mismo grupo que el propietario.
  • No hay permisos para otros usuarios.

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

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

Alternativamente, puede pasar el código fuente de Go a la función Fuente para formatear. Puede especificar el código en un segmento de bytes usando marcas ( ` ):

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))
  }
}

Al formatear, deberá convertir el segmento de bytes en cadena con la función de cadena . Aquí está el código fuente formateado.

resultado de una operación de formato

Personalización del proceso de formateo

Puede personalizar el proceso de formato con la estructura de configuración del paquete de formato. La estructura de configuración contiene campos donde puede especificar opciones de formato en la creación de instancias.

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,
}

Puede usar los campos para personalizar el comportamiento de su formateador configurando las opciones según sus requisitos.

A continuación, puede utilizar el método de origen de esta estructura para formatear un segmento de bytes en función de su configuración.

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)
}

Llamar a la función config.Source() de esta manera formatea el contenido del archivo main.go usando las opciones de configuración. Devuelve el contenido formateado como un segmento de bytes y un error.

Puede formatear y manipular cadenas en Go

El paquete de formato y el comando go fmt pueden ayudarlo a automatizar su proceso de formateo de código.

Go también proporciona un paquete fmt para formatear cadenas y un paquete strings para manipular cadenas.

El paquete fmt implementa E/S formateadas más simples con funciones análogas a las funciones printf y scanf de C. La función de cadenas implementa funciones simples para manipular cadenas codificadas en UTF-8.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *