Menu
Coddy logo textTech

Rückblick – Kontaktbuch

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy. Lektion 18 von 107.

challenge icon

Aufgabe

Einfach

Erstellen wir ein Kontaktbuchsystem, das benutzerdefinierte Typen, verschachtelte Structs, Struct-Tags und Nullwerte zusammenführt: alle Konzepte, die du in diesem Kapitel gemeistert hast.

Du wirst deinen Code auf zwei Dateien verteilen:

  • contact.go: Definiere dein Datenmodell für das Kontaktbuch mit aussagekräftigen benutzerdefinierten Typen und geeigneter JSON-Formatierung:
    • Erstelle die benutzerdefinierten Typen Phone und Email auf Grundlage von string, damit dein Code sich selbst dokumentiert
    • Definiere ein Address-Struct mit den Feldern Street, City und Country, jeweils mit geeigneten JSON-Tags
    • Definiere ein Contact-Struct mit Name (string), Phone (dein Phone-Typ), Email (dein Email-Typ) und Address (verschachteltes Struct). Verwende JSON-Tags, sodass phone und email weggelassen werden, wenn sie leer sind
  • main.go: Lies Kontaktinformationen aus der Eingabe, erstelle eine Contact-Instanz und gib sie als formatiertes JSON aus. Einige Kontakte können unvollständige Informationen enthalten: Lass Nullwerte und omitempty diese Fälle problemlos behandeln.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Name des Kontakts
  • Zeile 2: Telefonnummer (kann leer sein)
  • Zeile 3: E-Mail-Adresse (kann leer sein)
  • Zeile 4: Straßenadresse
  • Zeile 5: Stadt
  • Zeile 6: Land

Verwende json.MarshalIndent mit zwei Leerzeichen für die Einrückung. Gib den resultierenden JSON-String aus.

Wenn beispielsweise ein Kontakt mit dem Namen Alice Smith, ohne Telefonnummer, der E-Mail-Adresse alice@example.com, der Straße 123 Main St, der Stadt Boston und dem Land USA angegeben wird, sollte deine Ausgabe folgendermaßen aussehen:

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

Beachte, dass das Feld phone überhaupt nicht erscheint, da es leer war: Das ist dein omitempty-Tag in Aktion!

Probier es selbst

package main

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

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

	// Name lesen
	scanner.Scan()
	name := scanner.Text()

	// Telefon lesen (kann leer sein)
	scanner.Scan()
	phone := scanner.Text()

	// E-Mail lesen (kann leer sein)
	scanner.Scan()
	email := scanner.Text()

	// Straße lesen
	scanner.Scan()
	street := scanner.Text()

	// Stadt lesen
	scanner.Scan()
	city := scanner.Text()

	// Land lesen
	scanner.Scan()
	country := scanner.Text()

	// TODO: Erstelle eine Contact-Instanz mit den Eingabewerten
	// Verwende deine benutzerdefinierten Typen Phone und Email für die entsprechenden Felder
	// Erstelle die verschachtelte Address-Struktur mit street, city und country

	// TODO: Verwende json.MarshalIndent, um den Kontakt in JSON umzuwandeln
	// Verwende "" als Präfix und "  " (zwei Leerzeichen) als Einrückung

	// TODO: Gib den JSON-String aus
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Go-Compiler