Vai al contenuto
eLearner.app
Modulo 1 · Lezione 5 di 55/50 nel corso~10 min
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

Go
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

VerboCosa stampaEsempio
%v"valore di default" — funziona su qualunque tipo{Ada 36}
%+vcome %v ma con nomi dei campi nelle struct{Name:Ada Age:36}
%#vrappresentazione "Go-syntax" del valoremain.User{Name:"Ada", Age:36}
%Til tipo del valorefloat64
%dintero in base 1042
%ffloat3.140000
%.2ffloat con 2 decimali3.14
%sstringaAda
%qstringa "quotata" (con virgolette ed escape)"Ada\n"
%tbooltrue
%xesadecimale (minuscolo)2a
%bbinario101010
Go
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) // float64

Sprintf: costruire stringhe senza stamparle

Stessa interfaccia di Printf ma il risultato lo ricevi come string:

Go
msg := fmt.Sprintf("L'utente %s ha %d anni", "Ada", 36)
fmt.Println(msg) // L'utente Ada ha 36 anni

Lo 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):

Go
if _, err := os.Open("missing"); err != nil {
    return fmt.Errorf("apertura config: %w", err)
}

Prova tu

Esercizio#go.m1.l5.e1
Tentativi: 0Caricamento…

Stampa la stringa 'ciao mondo' usando fmt.Println.

Caricamento editor…
Mostra suggerimento

`fmt.Println` accetta una stringa e aggiunge la newline da sé.

Soluzione disponibile dopo 3 tentativi

Esercizio#go.m1.l5.e2
Tentativi: 0Caricamento…

Usa fmt.Printf per stampare 'eta=36' seguito da newline, usando il verbo %d per l'intero.

Caricamento editor…
Mostra suggerimento

`Printf` non aggiunge newline: devi includere `\\n` nella format string.

Soluzione disponibile dopo 3 tentativi

Quiz#go.m1.l5.e3
Pronto

Quale verbo stampa il TIPO dinamico di un valore?

Go
fmt.Printf("?\n", 3.14)
Opzioni di risposta

Recap

  • Print/Println/Printf differiscono per spazi e newline.
  • %v è il jolly che funziona su qualunque tipo; %+v mostra i nomi dei campi.
  • %T stampa il tipo (utile per debug rapido).
  • Sprintf costruisce stringhe; Errorf costruisce errori con wrapping (%w).
  • Printf NON aggiunge newline: scrivila tu nella format string.