Formátování kódu je důležitý způsob, jak zlepšit jeho čitelnost, konzistenci a znovupoužitelnost. Správně naformátovaný kód je snazší pochopit, upravit a udržovat.
Jednou ze skvělých funkcí Go jsou jeho dobře definované konvence formátování. K automatickému formátování kódu můžete použít vestavěný formátovací balíček a příkaz go fmt. To pomůže zajistit, aby ji ostatní programátoři Go mohli přečíst co nejsnáze.
Balíček Formát a příkaz fmt
The formát balíček implementuje standardní formátování pro Přejít na zdrojový kód. Balíček spolupracuje s go formátu nástroj příkazového řádku pro flexibilitu při formátování kódu Go.
Balíček formátu je submodul v balíčku go. Zde je postup, jak jej importovat:
import"go/format"
Dokumentaci příkazu go fmt můžete procházet zadáním Pomoc příkaz před fmt příkaz:
jít pomoc fmt
Za příkazem fmt zadejte název souboru pro formátování tohoto souboru. Tím se upraví mezery a odsazení vašeho kódu tak, aby odpovídaly standardům Go.
go fmt main.go
V zákulisí je go fmt alias pro příkaz gofmt, konkrétně:
gofmt -l -w
Tyto příznaky způsobí, že gofmt zapíše jakékoli změny do každého souboru, který zadáte, a vypíše názvy souborů, které změní.
Můžete přidat -X flag příkazu fmt. Parametr -x pomáhá zapisovat změny z formátovače do původního souboru.
go fmt -x main.go
The -n flag funguje podobně jako -x, ale neprovádí změny. Místo toho zobrazí příkazy, které by se fmt spustily bez -n:
go fmt -n main.go
Příznak říká formátoru, aby ukázal změny, což vám umožňuje je nejprve zkontrolovat, než je použijete.
Zde je jednoduchý program Go, který prochází celá čísla od nuly do pěti a vytiskne řetězec „Hello World!“.
// formátování souboru s názvem main.go, jak je ukázáno v příkladu výše
balík hlavní
import"fmt"
funchlavní() {
var X int=5
pro i:=0;i fmt. Println("Ahoj světe!")
}
}
Formátování zdrojového kódu Go
Balíček formátu obsahuje a Zdroj funkce pro formátování souborů Go z programů. Budete si muset soubor přečíst a předat obsah jako argumenty funkci Zdroj.
Funkce Zdroj vrátí obsah formátovaného souboru, který můžete zapsat do souboru, nebo nový.
Soubory můžete číst pomocí ReadFile funkce ioutil balík. Funkce ReadFile převezme název souboru a vrátí obsah souboru a chybu pro zpracování.
fileContent, chyba := ioutil. ReadFile("main.go")
-li chyba!= nula {
log. Fatalln("Došlo k chybě při čtení souboru", chyba)
}
Předání obsahu souboru funkci Zdroj vrátí obsah formátovaného souboru a chybu zpracování.
formatted, err := format. Zdroj (fileContent)
-li chyba!= nula {
log. Fatalln("Došlo k chybě formátování s funkcí zdroje", chyba)
}
Obsah formátovaného souboru můžete zapsat do souboru pomocí WriteFile funkce ioutil balík. Funkce WriteFile převezme název souboru, obsah a režim oprávnění k souboru, vrací jakoukoli chybu (chyby). Režim oprávnění je relevantní pouze v případě, že soubor neexistuje, v takovém případě jej WriteFile vytvoří.
The 0644 režim oprávnění k souboru dává:
- Oprávnění vlastníka souboru číst a zapisovat.
- Oprávnění ke čtení pro ostatní uživatele ve stejné skupině jako vlastník.
- Žádná oprávnění pro ostatní uživatele.
err = ioutil. WriteFile("main.go", formátovaný, 0644)
-li chyba!= nula {
log. Fatalln("Došlo k chybě při zápisu souboru", chyba)
}
Alternativně můžete zdrojový kód Go předat funkci Zdroj pro formátování. Kód můžete zadat v bajtovém řezu pomocí značek (`):
balík hlavní
import (
"fmt"
"go/format"
)funchlavní() {
// jednoduchý program, který vypočítá obsah trojúhelníku pomocí matematického výpočtu
// funkce
formatted, err := format. Zdroj([]byte(`
balík hlavní
import(
"fmt"
"matematika"
)
funchlavní(){
var A plovák64=3
var b plovák64=4
var C plovák64=5
var s plovák64=(a+b+c)/2
var plocha plovák64= matematika. Sqrt (s*(s-a)*(s-b)*(s-c))
fmt. Println("Obsah trojúhelníku je: ",plocha)
}
`))
-li chyba!= nula {
log. Fatalln("Došlo k chybě formátování s funkcí zdroje", chyba)
} jiný {
fmt. Println(tětiva(formátovaný))
}
}
Při formátování budete muset převést bajtový řez na řetězec s tětiva funkce. Zde je naformátovaný zdrojový kód.
Přizpůsobení procesu formátování
Proces formátování si můžete přizpůsobit pomocí formátovacího balíčku Konfigurace strukturovat. Struktura Config obsahuje pole, kde můžete zadat volby formátu při vytváření instance.
import"go/format"
config := &formát. Konfigurace{
// Šířka tabulátoru nastavuje počet mezer na tabulátoru.
Šířka tabulátoru: 8,// UseTabs udává, zda má formátovač používat tabulátory místo tabulátorů
// mezery.
UseTabs: Nepravdivé,// TabIndent se používá k určení, zda má být počáteční odsazení
// provádí se pomocí tabulátorů nebo mezer.
TabIndent: skutečný,// NoFinalTab určuje, zda má být odstraněna poslední karta
// řádky před jejich formátováním.
NoFinalTab: skutečný,// Mezery určuje, zda mají být pro zarovnání použity mezery.
Prostory: skutečný,
// NoTrimTrailingSpace určuje, zda by měl být prázdný znak na konci
// být oříznut z řádků před jejich formátováním.
NoTrimTrailingSpace: Nepravdivé,
}
Pole můžete použít k přizpůsobení chování vašeho formátovače nastavením možností na základě vašich požadavků.
Poté můžete použít metodu Source této struktury k formátování bajtového řezu na základě vaší konfigurace.
funchlavní() {
fileContent, chyba := ioutil. ReadFile("main.go")// všimněte si, že se jedná o zdrojovou metodu typu `config`, nikoli z
// `format` samotný balíček, i když funkčnost je stejná, budete
// toto musíte dodržovat, pokud potřebujete nakonfigurovat formátovač
formatted, err := config. Zdroj (fileContent)-li chyba!= nula {
log. Fatalln("Došlo k chybě formátování s typem konfigurace", chyba)
}
ioutil. WriteFile("main.go", formátovaný, 0644)
}
Volání config. Funkce Source() jako tato formátuje obsah souboru main.go pomocí konfiguračních možností. Vrátí formátovaný obsah jako bajtový řez a chybu.
Můžete formátovat a manipulovat s řetězcem v Go
Příkaz format package a go fmt vám může pomoci automatizovat proces formátování kódu.
Go také poskytuje balíček fmt pro formátování řetězců a balíček řetězců pro manipulaci s řetězci.
Balíček fmt implementuje jednodušší formátované I/O s funkcemi analogickými funkcím printf a scanf v C. Funkce strings implementuje jednoduché funkce pro manipulaci s řetězci kódovanými UTF-8.