Menu
Coddy logo textTech

Özet - Rehber

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 18 / 107.

challenge icon

Görev

Kolay

Bu bölümde ustalaştığınız tüm kavramları —özel türler, iç içe geçmiş struct'lar, struct etiketleri ve sıfır değerler— bir araya getiren bir kişi rehberi sistemi oluşturalım.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • contact.go: Anlamlı özel türler ve uygun JSON formatlaması ile kişi rehberi veri modelinizi tanımlayın:
    • Kodunuzu kendi kendini belgeleyen bir hale getirmek için string tabanlı Phone ve Email özel türlerini oluşturun
    • Her biri uygun JSON etiketlerine sahip Street, City ve Country alanlarını içeren bir Address struct'ı tanımlayın
    • Name (string), Phone (oluşturduğunuz Phone türü), Email (oluşturduğunuz Email türü) ve Address (iç içe geçmiş struct) alanlarını içeren bir Contact struct'ı tanımlayın. phone ve email alanlarının boş olmaları durumunda JSON çıktısında görünmemesi için JSON etiketlerini kullanın
  • main.go: Girdiden kişi bilgilerini okuyun, bir Contact örneği oluşturun ve bunu formatlanmış JSON olarak çıktı verin. Bazı kişilerin bilgileri eksik olabilir; bu durumları sıfır değerlerin ve omitempty etiketinin zarif bir şekilde yönetmesini sağlayın.

Aşağıdaki girdiler sağlanacaktır:

  • Satır 1: Kişi adı
  • Satır 2: Telefon numarası (boş olabilir)
  • Satır 3: E-posta adresi (boş olabilir)
  • Satır 4: Sokak adresi
  • Satır 5: Şehir
  • Satır 6: Ülke

Girinti için iki boşluk kullanarak json.MarshalIndent fonksiyonunu kullanın. Oluşan JSON dizesini yazdırın.

Örneğin, adı Alice Smith olan, telefonu olmayan, e-postası alice@example.com, sokağı 123 Main St, şehri Boston ve ülkesi USA olan bir kişi verildiğinde, çıktınız şu şekilde görünmelidir:

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

phone alanının boş olduğu için hiç görünmediğine dikkat edin; işte bu, omitempty etiketinizin iş başındaki halidir!

Kendin dene

package main

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

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

	// İsmi oku
	scanner.Scan()
	name := scanner.Text()

	// Telefonu oku (boş olabilir)
	scanner.Scan()
	phone := scanner.Text()

	// E-postayı oku (boş olabilir)
	scanner.Scan()
	email := scanner.Text()

	// Caddeyi oku
	scanner.Scan()
	street := scanner.Text()

	// Şehri oku
	scanner.Scan()
	city := scanner.Text()

	// Ülkeyi oku
	scanner.Scan()
	country := scanner.Text()

	// TODO: Girdi değerlerini kullanarak bir Contact örneği oluşturun
	// İlgili alanlar için özel türleriniz olan Phone ve Email türlerini kullanın
	// street, city ve country ile iç içe geçmiş Address yapısını oluşturun

	// TODO: Kişiyi JSON'a dönüştürmek için json.MarshalIndent kullanın
	// Önek olarak "" ve girinti olarak "  " (iki boşluk) kullanın

	// TODO: JSON dizesini yazdırın
	_ = name
	_ = phone
	_ = email
	_ = street
	_ = city
	_ = country
}

Nesne Yönelimli Programlama bölümündeki tüm dersler