Lezioni del modulo (5/5)
Input/output con fmt
Il pacchetto fmt della standard library è il tuo strumento principale
per stampare a console, formattare stringhe e leggere input. Se hai usato
printf in C ti sentirai a casa, ma con qualche raffinatezza in più
grazie ai verbi %v e %T.
Print, Println, Printf: tre funzioni, tre comportamenti
fmt.Print("ciao ", "mondo") // "ciao mondo" (niente newline finale)
fmt.Println("ciao", "mondo") // "ciao mondo\n" (newline + spazi tra argomenti)
fmt.Printf("eta=%d\n", 36) // "eta=36\n" (format string esplicita)I verbi che usi sempre
| Verbo | Cosa stampa | Esempio |
|---|---|---|
%v | "valore di default" — funziona su qualunque tipo | {Ada 36} |
%+v | come %v ma con nomi dei campi nelle struct | {Name:Ada Age:36} |
%#v | rappresentazione "Go-syntax" del valore | main.User{Name:"Ada", Age:36} |
%T | il tipo del valore | float64 |
%d | intero in base 10 | 42 |
%f | float | 3.140000 |
%.2f | float con 2 decimali | 3.14 |
%s | stringa | Ada |
%q | stringa "quotata" (con virgolette ed escape) | "Ada\n" |
%t | bool | true |
%x | esadecimale (minuscolo) | 2a |
%b | binario | 101010 |
u := struct{ Name string; Age int }{"Ada", 36}
fmt.Printf("%v\n", u) // {Ada 36}
fmt.Printf("%+v\n", u) // {Name:Ada Age:36}
fmt.Printf("%T\n", 3.14) // float64Sprintf: costruire stringhe senza stamparle
Stessa interfaccia di Printf ma il risultato lo ricevi come string:
msg := fmt.Sprintf("L'utente %s ha %d anni", "Ada", 36)
fmt.Println(msg) // L'utente Ada ha 36 anniLo userai in continuazione per costruire messaggi, log e errori.
Errorf: stringhe + wrapping di errori
fmt.Errorf crea un error con il formato di Printf. Con il verbo
speciale %w puoi wrappare un errore esistente per preservarne la
catena (vedremo a fondo nel modulo Interfacce):
if _, err := os.Open("missing"); err != nil {
return fmt.Errorf("apertura config: %w", err)
}Prova tu
Stampa la stringa 'ciao mondo' usando fmt.Println.
Mostra suggerimento
`fmt.Println` accetta una stringa e aggiunge la newline da sé.
Soluzione disponibile dopo 3 tentativi
Usa fmt.Printf per stampare 'eta=36' seguito da newline, usando il verbo %d per l'intero.
Mostra suggerimento
`Printf` non aggiunge newline: devi includere `\\n` nella format string.
Soluzione disponibile dopo 3 tentativi
Quale verbo stampa il TIPO dinamico di un valore?
fmt.Printf("?\n", 3.14)Recap
Print/Println/Printfdifferiscono per spazi e newline.%vè il jolly che funziona su qualunque tipo;%+vmostra i nomi dei campi.%Tstampa il tipo (utile per debug rapido).Sprintfcostruisce stringhe;Errorfcostruisce errori con wrapping (%w).PrintfNON aggiunge newline: scrivila tu nella format string.