Menu
Coddy logo textTech

Ripasso - Rubrica

Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 18 di 107.

challenge icon

Sfida

Facile

Costruiamo un sistema di rubrica che riunisca tipi personalizzati, struct annidate, tag delle struct e valori zero: tutti i concetti che hai imparato in questo capitolo.

Organizzerai il codice in due file:

  • contact.go: definisci il modello dei dati della rubrica con tipi personalizzati significativi e una formattazione JSON appropriata:
    • Crea i tipi personalizzati Phone e Email basati su string per rendere il codice autoesplicativo
    • Definisci una struct Address con i campi Street, City e Country, ciascuno con i tag JSON appropriati
    • Definisci una struct Contact che contenga Name (string), Phone (il tuo tipo Phone), Email (il tuo tipo Email) e Address (struct annidata). Usa i tag JSON per omettere phone e email se sono vuoti
  • main.go: leggi le informazioni del contatto dall'input, crea un'istanza di Contact e stampala come JSON formattato. Alcuni contatti potrebbero avere informazioni incomplete: lascia che i valori zero e omitempty le gestiscano correttamente.

Verranno forniti i seguenti input:

  • Riga 1: nome del contatto
  • Riga 2: numero di telefono (può essere vuoto)
  • Riga 3: indirizzo email (può essere vuoto)
  • Riga 4: indirizzo stradale
  • Riga 5: città
  • Riga 6: paese

Usa json.MarshalIndent con due spazi per l'indentazione. Stampa la stringa JSON risultante.

Ad esempio, se ti viene fornito un contatto con il nome Alice Smith, senza telefono, con l'email alice@example.com, l'indirizzo 123 Main St, la città Boston e il paese USA, l'output dovrebbe essere simile a:

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

Nota che il campo phone non compare affatto perché era vuoto: è il tag omitempty in azione!

Provalo tu

package main

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

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

	// Leggi il nome
	scanner.Scan()
	name := scanner.Text()

	// Leggi il numero di telefono (può essere vuoto)
	scanner.Scan()
	phone := scanner.Text()

	// Leggi l'indirizzo email (può essere vuoto)
	scanner.Scan()
	email := scanner.Text()

	// Leggi street
	scanner.Scan()
	street := scanner.Text()

	// Leggi city
	scanner.Scan()
	city := scanner.Text()

	// Leggi country
	scanner.Scan()
	country := scanner.Text()

	// TODO: Crea un'istanza di Contact usando i valori di input
	// Usa i tuoi tipi personalizzati Phone ed Email per i rispettivi campi
	// Crea la struct Address annidata con street, city e country

	// TODO: Usa json.MarshalIndent per convertire il contatto in JSON
	// Usa "" come prefisso e "  " (due spazi) come rientro

	// TODO: Stampa la stringa JSON
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore Go online