Formattazione Stringhe
La funzione Printf()
del package fmt
produce stringhe formattate con un meccanismo molto simile a quello del C, C++ e Java.
Attenzione però che i segnalini posizionali disponibili sono leggermente diversi e propri di Go.
(450string-formatting.go):
package main
import "fmt"
import "os"
type point struct {
x, y int
}
func main() {
// Valori di oggetto composto
p := point{1, 2}
fmt.Printf("%v\n", p)
// Chiavi e valori di una struct
fmt.Printf("%+v\n", p)
// Rappresentazione in sintassi Go
fmt.Printf("%#v\n", p)
// Tipo di un valore
fmt.Printf("%T\n", p)
// Valore booleano
fmt.Printf("%t\n", true)
// Intero decimale
fmt.Printf("%d\n", 123)
// Intero in rappresentazione binaria
fmt.Printf("%b\n", 14)
// Carattere corrispondente a un valore Unicode
fmt.Printf("%c\n", 33)
// Intero in esadecimale
fmt.Printf("%x\n", 456)
// Float
fmt.Printf("%f\n", 78.9)
// Float in rappresentazione scientifica
fmt.Printf("%e\n", 123400000.0)
fmt.Printf("%E\n", 123400000.0)
// Stringa
fmt.Printf("%s\n", "\"string\"")
// Stringhe con doppio quoting
fmt.Printf("%q\n", "\"string\"")
// Stringhe in base-16 due caratteri per byte
fmt.Printf("%x\n", "hex this")
// Puntatore
fmt.Printf("%p\n", &p)
// Intero con larghezza di campo, a destra
fmt.Printf("|%6d|%6d|\n", 12, 345)
// Float con larghezza di campo e numero decimali
fmt.Printf("|%6.2f|%6.2f|\n", 1.2, 3.45)
// Allineato a sinistra
fmt.Printf("|%-6.2f|%-6.2f|\n", 1.2, 3.45)
// Larghezza di campo per stringhe, a destra
fmt.Printf("|%6s|%6s|\n", "foo", "b")
// Larghezza di campo per stringhe, a sinistra
fmt.Printf("|%-6s|%-6s|\n", "foo", "b")
// Stampa dentro una stringa
s := fmt.Sprintf("a %s", "string")
fmt.Println(s)
// Stampa ad altro 'file' qui standard error
fmt.Fprintf(os.Stderr, "an %s\n", "error")
}
La funzione Fprintf()
è interessante: prende come ulteriore primo argomento il file descriptor a cui inviare la stampa.
La funzione Printf()
invia la stampa a standard output.
I tre file descriptor di default dei processi Unix sono in Go rappresentati con os.Stdin
, os.Stdout
e os.Stderr
.
Ma dato che in Unix un file è un file e può essere qualsiasi cosa sia leggibile o scrivibile, il primo argomanto può essere anche:
- un file descriptor di file aperto
- una connessione a database
- una connessione di rete
- un identificativo di web server
- ...