Jak sformatować źródło Go dla czystszego, spójnego kodu

Jak sformatować źródło Go dla czystszego, spójnego kodu

Formatowanie kodu jest ważnym sposobem zwiększania jego czytelności, spójności i możliwości ponownego użycia. Prawidłowo sformatowany kod jest łatwiejszy do zrozumienia, modyfikacji i utrzymania.

Jedną ze wspaniałych cech Go są dobrze zdefiniowane konwencje formatowania. Możesz użyć wbudowanego pakietu formatu i polecenia go fmt, aby automatycznie sformatować swój kod. Pomoże to zapewnić, że inni programiści Go będą mogli go przeczytać tak łatwo, jak to tylko możliwe.

Pakiet formatu i polecenie fmt

Pakiet format implementuje standardowe formatowanie kodu źródłowego Go. Pakiet współpracuje z narzędziem wiersza poleceń go format , zapewniając elastyczność formatowania kodu Go.

Pakiet format jest modułem podrzędnym w pakiecie go. Oto jak możesz go zaimportować:

import "go/format"

Możesz przeglądać dokumentację polecenia go fmt, podając polecenie help przed poleceniem fmt :

go help fmt

Podaj nazwę pliku po poleceniu fmt, aby sformatować ten plik. Spowoduje to dostosowanie białych znaków i wcięć kodu do standardów Go.

go fmt main.go

Za kulisami go fmt jest aliasem polecenia gofmt, w szczególności:

gofmt -l -w

Te flagi powodują, że gofmt zapisuje wszelkie zmiany w każdym dostarczonym pliku i wyświetla nazwy plików, które zmienia.

Możesz dodać flagę -x do polecenia fmt. Flaga -x pomaga zapisywać zmiany z programu formatującego do oryginalnego pliku.

go fmt -x main.go

Flaga -n działa podobnie do -x, ale nie wprowadza zmian. Zamiast tego wyświetla polecenia, które go fmt uruchomiłyby bez opcji -n:

go fmt -n main.go

Flaga mówi programowi formatującemu, aby pokazał zmiany, co umożliwia ich przejrzenie przed zastosowaniem.

Oto prosty program w Go, który przechodzi przez liczby całkowite od zera do pięciu i wyświetla napis „Witaj, świecie!”.

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

Formatowanie kodu źródłowego Go

Pakiet format zawiera funkcję Source do formatowania plików Go z programów. Będziesz musiał przeczytać plik i przekazać zawartość jako argumenty do funkcji Source.

Funkcja Source zwróci sformatowaną zawartość pliku, którą możesz zapisać do pliku lub nowego.

Możesz czytać pliki za pomocą funkcji ReadFile pakietu ioutil . Funkcja ReadFile pobiera nazwę pliku i zwraca zawartość pliku oraz błąd do obsługi.

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

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

Przekazanie zawartości pliku do funkcji Source zwraca sformatowaną zawartość pliku i błąd do obsługi.

formatted, err: = format.Source(fileContent)

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

Możesz zapisać sformatowaną zawartość pliku do pliku za pomocą funkcji WriteFile pakietu ioutil . Funkcja WriteFile pobiera nazwę pliku, zawartość i tryb uprawnień do pliku, zwracając wszelkie błędy. Tryb uprawnień ma znaczenie tylko wtedy, gdy plik nie istnieje, w takim przypadku WriteFile go utworzy.

Tryb uprawnień do plików 0644 daje:

  • Uprawnienia do odczytu i zapisu właściciela pliku.
  • Odczyt uprawnień dla innych użytkowników w tej samej grupie co właściciel.
  • Brak uprawnień dla innych użytkowników.

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

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

Alternatywnie możesz przekazać kod źródłowy Go do funkcji Source w celu sformatowania. Możesz określić kod w wycinku bajtów za pomocą znaczników ( ` ):

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

Podczas formatowania będziesz musiał przekonwertować wycinek bajtów na łańcuch za pomocą funkcji string . Oto sformatowany kod źródłowy.

wynik operacji formatowania

Dostosowywanie procesu formatowania

Możesz dostosować proces formatowania za pomocą struktury Config pakietu formatu . Struktura Config zawiera pola, w których można określić opcje formatu podczas tworzenia wystąpienia.

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

Możesz użyć tych pól, aby dostosować zachowanie formatyzatora, ustawiając opcje na podstawie swoich wymagań.

Następnie możesz użyć metody Source tej struktury, aby sformatować wycinek bajtów na podstawie swojej konfiguracji.

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

Wywołanie funkcji config.Source() w ten sposób formatuje zawartość pliku main.go przy użyciu opcji konfiguracyjnych. Zwraca sformatowaną zawartość jako wycinek bajtów i błąd.

Możesz formatować i manipulować łańcuchem w Go

Pakiet format i komenda go fmt mogą pomóc zautomatyzować proces formatowania kodu.

Go udostępnia również pakiet fmt do formatowania łańcuchów znaków oraz pakiet strings do manipulowania ciągami znaków.

Pakiet fmt implementuje prostsze sformatowane wejścia/wyjścia z funkcjami analogicznymi do funkcji printf i scanf z C. Funkcja strings implementuje proste funkcje do manipulowania ciągami zakodowanymi w UTF-8.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *