Özet - Rehber
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 18 / 107.
Görev
KolayBu 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
stringtabanlıPhoneveEmailözel türlerini oluşturun - Her biri uygun JSON etiketlerine sahip
Street,CityveCountryalanlarını içeren birAddressstruct'ı tanımlayın Name(string),Phone(oluşturduğunuz Phone türü),Email(oluşturduğunuz Email türü) veAddress(iç içe geçmiş struct) alanlarını içeren birContactstruct'ı tanımlayın.phoneveemailalanlarının boş olmaları durumunda JSON çıktısında görünmemesi için JSON etiketlerini kullanın
- Kodunuzu kendi kendini belgeleyen bir hale getirmek için
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 veomitemptyetiketinin 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
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker Pool