Passer au contenu principal
eLearner.app
Module 1 · Leçon 5 sur 55/50 dans le cours~10 min
Leçons du module (5/5)

Entrées/sorties avec fmt

Le package fmt de la bibliothèque standard est votre principal outil pour imprimer sur la console, le formatage des chaînes et la lecture des entrées. Si vous avez utilisé printf en C, vous vous sentirez comme chez vous, mais avec un raffinement supplémentaire grâce aux verbes %v et %T.

Print, Println, Printf : trois fonctions, trois comportements

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)

Les verbes que vous utiliserez tout le temps

VerbeCe qu'il imprimeExemple
%v"valeur par défaut" — fonctionne sur n'importe quel type{Ada 36}
%+vcomme %v mais avec des noms de champs dans les structures{Name:Ada Age:36}
%#vReprésentation "Go-syntaxe" de la valeurmain.User{Name:"Ada", Age:36}
%Tle type de la valeurfloat64
%dentier en base 10{Ada 36}0
{Ada 36}1flotter{Ada 36}2
{Ada 36}3float avec 2 décimales{Ada 36}4
{Ada 36}5chaîne{Ada 36}6
{Ada 36}7chaîne "citée" (avec guillemets et échappements){Ada 36}8
{Ada 36}9booléen%+v0
%+v1hexadécimal (minuscule)%+v2
%+v3binaire%+v4
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 : construire des chaînes sans les imprimer

Même interface que Printf, mais le résultat vous est renvoyé sous forme de string :

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

Vous l'utiliserez constamment pour créer des messages, des journaux et des erreurs.

Errorf : chaînes + emballage d'erreur

fmt.Errorf crée un error avec un formatage de style Printf. Avec le verbe spécial %w, vous pouvez envelopper une erreur existante pour préserver sa chaîne (nous aborderons cela en profondeur dans le module Interfaces) :

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

A ton tour

Exercice#go.m1.l5.e1
Tentatives : 0Chargement…

Imprimez la chaîne 'ciao mondo' en utilisant fmt.Println.

Chargement de l'éditeur…
Afficher l'indice

`fmt.Println` prend une chaîne et ajoute la nouvelle ligne elle-même.

Solution disponible après 3 tentatives

Exercice#go.m1.l5.e2
Tentatives : 0Chargement…

Utilisez fmt.Printf pour imprimer 'eta=36' suivi d'une nouvelle ligne, en utilisant le verbe %d pour l'entier.

Chargement de l'éditeur…
Afficher l'indice

`Printf` n'ajoute pas de nouvelle ligne : vous devez inclure ` ` dans la chaîne de format.

Solution disponible après 3 tentatives

Quiz#go.m1.l5.e3
Prêt

Quel verbe imprime le TYPE dynamique d'une valeur ?

Go
fmt.Printf("?\n", 3.14)
Options de réponse

Récapitulatif

  • Print/Println/Printf diffèrent par les espaces et les nouvelles lignes.
  • %v est le joker qui fonctionne sur n'importe quel type ; %+v affiche les noms de champs.
  • %T imprime le type (utile pour un débogage rapide).
  • Sprintf construit des chaînes ; Errorf génère des erreurs avec le packaging (%w).
  • Printf n'ajoute PAS de nouvelle ligne : écrivez-la vous-même dans la chaîne de format.