|
Go nabízí výbornou podporu pro formátování řetězců
v tradici printf. Zde jsou některé příklady
běžných úkolů pro formátování řetězců.
|
|
|
|
|
|
|
|
|
|
type point struct {
x, y int
}
|
|
|
|
|
Go nabízí několik “verbs” (sloves) navržených pro
formátování obecných Go hodnot. Například tohle vytiskne
instanci naši struktury point.
|
p := point{1, 2}
fmt.Printf("%v\n", p)
|
|
Pokud je hodnota struktura, varianta %+v bude obsahovat
také názvy prvků struktury.
|
|
|
Varianta %#v vypíše hodnotu reprezentovanou pomocí
Go syntaxe, tj. například kus zdrojového kódu
který by danou hodnotu vytvořil.
|
|
|
Pro vypsání typu hodnoty, použijte %T.
|
|
|
Formátování boolean proměnných je přímočaré.
|
|
|
Je hodně možností jak formátovat integery.
Použij %d pro standardní formátování v desítkové soustavě.
|
|
|
Toto vypíše binární reprezentaci.
|
|
|
Toto vypíše znak odpovídající danému integeru.
|
|
|
%x poskytuje hodnotu v hexadecimálním kódu.
|
|
|
Máme také několik možností formátování pro
floaty. Pro základní desetinné formátování použijte %f.
|
|
|
Slovesa %e a %E formátují floaty do (trochu odlišné
verzi) vědeckého zápisu.
|
fmt.Printf("%e\n", 123400000.0)
fmt.Printf("%E\n", 123400000.0)
|
|
Pro běžný tisk řetězců použijte %s.
|
fmt.Printf("%s\n", "\"string\"")
|
|
Pro tisk řetězce obaleného uvozovkami jako v Go kódu,
použijte %q.
|
fmt.Printf("%q\n", "\"string\"")
|
|
Jako jsme viděli už dříve s integery, %x renderuje
řetězec v 16-kové soustavě se dvěma výstupními znaky
pro jeden vstupní bajt.
|
fmt.Printf("%x\n", "hex this")
|
|
Pro výpis reprezentace ukazatele, použijte %p.
|
|
|
Při formátování čísel často budete chtít ovládat
šířku a přesnost výsledného čísla.
Pro specifikaci délku integeru, použije číslo
za slovesem %. Ve výchozím stavu bude výsledek
zarovnaný doprava a zleva doplněný mezerami.
|
fmt.Printf("|%6d|%6d|\n", 12, 345)
|
|
Také můžete specifikovat šířku vypisovaných floatů,
ačkoliv obvzkle také budete chtít omezit
desetinnou přesnost pomocí syntaxe se
zápisem šířka.přesnost
|
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
|
|
Pro levé zarovnání použij příznak -.
|
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
|
|
Také možná budete chtít ovládat šířku při formátování
řetězců, obzvlášť pro dosažení jejích zarovnání v
tavulkovém výstupu. Pro základní pravé zarovnání na šířku.
|
fmt.Printf("|%6s|%6s|\n", "foo", "b")
|
|
Pro levé zarovnání použitje příznak - stejně jako u čísel.
|
fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
|
|
Zatím jsme viděli Printf, který vupisuje
formátovaný řetězec na os.Stdout. Sprintf formátuje
a vrací řezězec bež toho aby ho někam vypisoval..
|
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
|
|
Také můžete s pomocí Fprintf vypsat+formátovat i do
jiných io.Writers než jen os.Stdout.
|
fmt.Fprintf(os.Stderr, "an %s\n", "error")
}
|