Özet - Rehber
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 18 / 107.
Görev
KolayÖzel türleri, iç içe yapıları, yapı etiketlerini ve sıfır değerleri bir araya getiren bir kişi rehberi sistemi oluşturalım: bu bölümde öğrendiğin tüm kavramlar.
Kodunu iki dosyaya ayıracaksın:
contact.go: Anlamlı özel türler ve uygun JSON biçimlendirmesiyle kişi rehberinin veri modelini tanımla:- Kodunu kendi kendini açıklayan hâle getirmek için
Phonetemel alınarakEmailvestringözel türlerini oluştur Address,StreetveCityalanlarına sahip birCountryyapısı tanımla; her alana uygun JSON etiketleri ekleContact(string),Name(kendi Phone türün),Phone(kendi Email türün) veEmail(iç içe yapı) alanlarını içeren birAddressyapısı tanımla.phoneveemailboş olduğunda yok sayılmaları için JSON etiketlerini kullan
- Kodunu kendi kendini açıklayan hâle getirmek için
main.go: Kişi bilgilerini girdiden oku, bir Contact örneği oluştur ve bunu biçimlendirilmiş JSON olarak çıktıla. Bazı kişilerin bilgileri eksik olabilir: sıfır değerlerin veomitemptyetiketinin bu durumları düzgün şekilde yönetmesine izin ver.
Aşağıdaki girdiler sağlanacaktır:
- 1. satır: Kişi adı
- 2. satır: Telefon numarası (boş olabilir)
- 3. satır: E-posta adresi (boş olabilir)
- 4. satır: Sokak adresi
- 5. satır: Şehir
- 6. satır: Ülke
Girinti için iki boşluk kullanarak json.MarshalIndent işlevini kullan. Ortaya çıkan JSON dizesini yazdır.
Örneğin; adı Alice Smith, telefonu olmayan, e-postası alice@example.com, sokağı 123 Main St, şehri Boston ve ülkesi USA olan bir kişi verildiğinde çıktın şöyle 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 et: işte bu, omitempty etiketinin iş başındaki hâli!
Kendin dene
package main
import (
"bufio"
"encoding/json"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
// Adı 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()
// Sokağı oku
scanner.Scan()
street := scanner.Text()
// Şehri oku
scanner.Scan()
city := scanner.Text()
// Ülkeyi oku
scanner.Scan()
country := scanner.Text()
// TODO: Giriş değerlerini kullanarak bir Contact örneği oluştur
// İlgili alanlar için özel Phone ve Email tiplerinizi kullanın
// street, city ve country ile iç içe Address struct'ını oluştur
// TODO: contact'ı JSON'a dönüştürmek için json.MarshalIndent kullan
// Önek olarak "" ve girinti olarak " " (iki boşluk) kullan
// TODO: JSON dizesini yazdır
_ = 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 PoolKendi başına pratik yap: Online Go derleyicisi