Menu
Coddy logo textTech

Zusammenfassung - Kontaktbuch

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein Kontaktbuchsystem erstellen, das benutzerdefinierte Typen, verschachtelte Structs, Struct-Tags und Nullwerte vereint – all die Konzepte, die Sie in diesem Kapitel gemeistert haben.

Sie werden Ihren Code auf zwei Dateien aufteilen:

  • contact.go: Definieren Sie Ihr Kontaktbuch-Datenmodell mit aussagekräftigen benutzerdefinierten Typen und korrekter JSON-Formatierung:
    • Erstellen Sie benutzerdefinierte Typen Phone und Email basierend auf string, um Ihren Code selbstdokumentierend zu machen
    • Definieren Sie ein Address-Struct mit den Feldern Street, City und Country, jeweils mit entsprechenden JSON-Tags
    • Definieren Sie ein Contact-Struct, das Name (string), Phone (Ihr Phone-Typ), Email (Ihr Email-Typ) und Address (verschachteltes Struct) enthält. Verwenden Sie JSON-Tags, bei denen phone und email weggelassen werden sollen, wenn sie leer sind
  • main.go: Lesen Sie Kontaktinformationen aus der Eingabe ein, erstellen Sie eine Contact-Instanz und geben Sie diese als formatiertes JSON aus. Einige Kontakte verfügen möglicherweise über unvollständige Informationen – lassen Sie Nullwerte und omitempty diese elegant handhaben.

Die folgenden Eingaben werden bereitgestellt:

  • Zeile 1: Kontaktname
  • Zeile 2: Telefonnummer (kann leer sein)
  • Zeile 3: E-Mail-Adresse (kann leer sein)
  • Zeile 4: Straße
  • Zeile 5: Stadt
  • Zeile 6: Land

Verwenden Sie json.MarshalIndent mit zwei Leerzeichen für die Einrückung. Geben Sie den resultierenden JSON-String aus.

Wenn Sie beispielsweise einen Kontakt mit dem Namen Alice Smith, ohne Telefonnummer, der E-Mail alice@example.com, der Straße 123 Main St, der Stadt Boston und dem Land USA erhalten, sollte Ihre Ausgabe wie folgt aussehen:

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

Beachten Sie, dass das Feld phone überhaupt nicht erscheint, da es leer war – das ist Ihr 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()

	// Telefonnummer 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 unter Verwendung der Eingabewerte
	// Verwende deine benutzerdefinierten Typen Phone und Email für die entsprechenden Felder
	// Erstelle das verschachtelte Address-Struct mit street, city und country

	// TODO: Verwende json.MarshalIndent, um den Kontakt in JSON zu konvertieren
	// 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