Menu
Coddy logo textTech

Récapitulatif - Carnet de contacts

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy — leçon 18 sur 107.

challenge icon

Défi

Facile

Construisons un système de carnet de contacts qui rassemble les types personnalisés, les structures imbriquées, les balises de structure (struct tags) et les valeurs par défaut (zero values)—tous les concepts que vous avez maîtrisés dans ce chapitre.

Vous organiserez votre code sur deux fichiers :

  • contact.go : Définissez votre modèle de données de carnet de contacts avec des types personnalisés significatifs et un formatage JSON approprié :
    • Créez des types personnalisés Phone et Email basés sur string pour rendre votre code auto-documenté
    • Définissez une structure Address avec les champs Street, City et Country, chacun avec les balises JSON appropriées
    • Définissez une structure Contact contenant Name (string), Phone (votre type Phone), Email (votre type Email) et Address (structure imbriquée). Utilisez des balises JSON où phone et email doivent être omis s'ils sont vides
  • main.go : Lisez les informations de contact depuis l'entrée, créez une instance de Contact et affichez-la sous forme de JSON formaté. Certains contacts peuvent avoir des informations incomplètes—laissez les valeurs par défaut et omitempty gérer cela avec élégance.

Les entrées suivantes seront fournies :

  • Ligne 1 : Nom du contact
  • Ligne 2 : Numéro de téléphone (peut être vide)
  • Ligne 3 : Adresse e-mail (peut être vide)
  • Ligne 4 : Rue
  • Ligne 5 : Ville
  • Ligne 6 : Pays

Utilisez json.MarshalIndent avec deux espaces pour l'indentation. Affichez la chaîne JSON résultante.

Par exemple, si l'on donne un contact avec le nom Alice Smith, pas de téléphone, l'e-mail alice@example.com, la rue 123 Main St, la ville Boston et le pays USA, votre sortie devrait ressembler à ceci :

{
  "name": "Alice Smith",
  "email": "alice@example.com",
  "address": {
    "street": "123 Main St",
    "city": "Boston",
    "country": "USA"
  }
}

Remarquez comment le champ phone n'apparaît pas du tout puisqu'il était vide—c'est votre balise omitempty à l'œuvre !

Essayez vous-même

package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"os"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)

	// Lire le nom
	scanner.Scan()
	name := scanner.Text()

	// Lire le téléphone (peut être vide)
	scanner.Scan()
	phone := scanner.Text()

	// Lire l'e-mail (peut être vide)
	scanner.Scan()
	email := scanner.Text()

	// Lire la rue
	scanner.Scan()
	street := scanner.Text()

	// Lire la ville
	scanner.Scan()
	city := scanner.Text()

	// Lire le pays
	scanner.Scan()
	country := scanner.Text()

	// TODO: Créer une instance de Contact en utilisant les valeurs d'entrée
	// Utilisez vos types personnalisés Phone et Email pour les champs respectifs
	// Créez la structure Address imbriquée avec street, city, et country

	// TODO: Utiliser json.MarshalIndent pour convertir le contact en JSON
	// Utiliser "" comme préfixe et "  " (deux espaces) comme indentation

	// TODO: Imprimer la chaîne JSON
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Toutes les leçons de Programmation Orientée Objet