Menu
Coddy logo textTech

Podsumowanie – książka kontaktów

Część sekcji Programowanie obiektowe ścieżki GO w Coddy. Lekcja 18 z 107.

challenge icon

Wyzwanie

Łatwy

Stwórzmy system książki kontaktów, który łączy typy niestandardowe, zagnieżdżone struktury, tagi struktur i wartości zerowe — wszystkie zagadnienia opanowane w tym rozdziale.

Rozmieścisz kod w dwóch plikach:

  • contact.go: Zdefiniuj model danych książki kontaktów, używając znaczących typów niestandardowych i prawidłowego formatowania JSON:
    • Utwórz typy niestandardowe Phone i Email oparte na typie string, aby kod sam dokumentował swoje przeznaczenie
    • Zdefiniuj strukturę Address z polami Street, City i Country, każde z odpowiednim tagiem JSON
    • Zdefiniuj strukturę Contact zawierającą Name (string), Phone (twój typ Phone), Email (twój typ Email) i Address (zagnieżdżona struktura). Użyj tagów JSON, aby pola phone i email były pomijane, gdy są puste
  • main.go: Odczytaj dane kontaktowe z wejścia, utwórz instancję Contact i wypisz ją jako sformatowany JSON. Niektóre kontakty mogą zawierać niepełne informacje: pozwól, aby wartości zerowe i omitempty obsłużyły takie przypadki.

Podane zostaną następujące dane wejściowe:

  • Wiersz 1: Imię i nazwisko kontaktu
  • Wiersz 2: Numer telefonu (może być pusty)
  • Wiersz 3: Adres e-mail (może być pusty)
  • Wiersz 4: Adres ulicy
  • Wiersz 5: Miasto
  • Wiersz 6: Kraj

Użyj json.MarshalIndent z dwoma spacjami wcięcia. Wypisz otrzymany ciąg JSON.

Na przykład, jeśli podano kontakt o imieniu i nazwisku Alice Smith, bez numeru telefonu, z adresem e-mail alice@example.com, adresem ulicy 123 Main St, miastem Boston i krajem USA, wynik powinien wyglądać tak:

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

Zauważ, że pole phone w ogóle się nie pojawia, ponieważ było puste: właśnie tak działa tag omitempty!

Spróbuj swoich sił

package main

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

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

	// Odczytaj imię
	scanner.Scan()
	name := scanner.Text()

	// Odczytaj numer telefonu (może być pusty)
	scanner.Scan()
	phone := scanner.Text()

	// Odczytaj adres e-mail (może być pusty)
	scanner.Scan()
	email := scanner.Text()

	// Odczytaj ulicę
	scanner.Scan()
	street := scanner.Text()

	// Odczytaj miasto
	scanner.Scan()
	city := scanner.Text()

	// Odczytaj kraj
	scanner.Scan()
	country := scanner.Text()

	// TODO: Utwórz instancję Contact, używając wartości wejściowych
	// Użyj własnych typów Phone i Email dla odpowiednich pól
	// Utwórz zagnieżdżoną strukturę Address z polami street, city i country

	// TODO: Użyj json.MarshalIndent, aby przekształcić kontakt w JSON
	// Użyj "" jako prefiksu i "  " (dwóch spacji) jako wcięcia

	// TODO: Wypisz ciąg JSON
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator Go online