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 d’adresses qui réunit les types personnalisés, les structures imbriquées, les balises de structure et les valeurs zéro : tous les concepts que tu as maîtrisés dans ce chapitre.

Tu organiseras ton code sur deux fichiers :

  • contact.go : définis le modèle de données de ton carnet d’adresses avec des types personnalisés pertinents et un formatage JSON approprié :
    • Crée les types personnalisés Phone et Email basés sur string afin de rendre ton code explicite
    • Définis une structure Address avec les champs Street, City et Country, chacun avec les balises JSON appropriées
    • Définis une structure Contact contenant Name (string), Phone (ton type Phone), Email (ton type Email) et Address (structure imbriquée). Utilise des balises JSON afin que phone et email soient omis lorsqu’ils sont vides
  • main.go : lis les informations du contact depuis l’entrée, crée une instance de Contact et affiche son contenu au format JSON. Certains contacts peuvent avoir des informations incomplètes : laisse les valeurs zéro et omitempty gérer cela correctement.

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 : adresse
  • Ligne 5 : ville
  • Ligne 6 : pays

Utilise json.MarshalIndent avec deux espaces pour l’indentation. Affiche la chaîne JSON obtenue.

Par exemple, si un contact possède le nom Alice Smith, aucun téléphone, l’adresse e-mail alice@example.com, l’adresse 123 Main St, la ville Boston et le pays USA, ta sortie devrait ressembler à ceci :

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

Remarque comment le champ phone n’apparaît pas du tout puisqu’il était vide : c’est ta balise omitempty en action !

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'email (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éer 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: Afficher la chaîne JSON
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur Go en ligne