Projeye Genel Bakış ve Yapı
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 98 / 107.
Görev
KolayTemel yapıyı kurarak Kütüphane Yönetim Sistemi projesine başlayalım! Bu ilk adımda, sonraki derslerde oluşturacağımız tüm özellikleri destekleyecek temel iskeleti oluşturacaksın.
Sorumlulukların temiz bir şekilde ayrılmasını sağlamak için kodunu üç dosyada düzenleyeceksin:
book.go: Bir kütüphane kitabını temsil eden birBookyapısı tanımla. Her kitapta birID,Title,AuthorveAvailabledurumu (boolean) bulunmalıdır. ID, başlık ve yazarı parametre olarak alan veNewBookdeğerini varsayılan olarakAvailableşeklinde ayarlayarak yeni bir Book işaretçisine dönentrueoluşturucu işlevini oluştur. Ayrıca kitabın bilgilerini şu biçimde döndüren birString()yöntemi ekle:[ID] Title by Authoruser.go:User,IDveNamealanlarına sahip bir kütüphane üyesini temsil eden birEmailyapısı tanımla. Üç değerin tamamını alan ve yeni bir User işaretçisine dönenNewUseroluşturucu işlevini oluştur. Şunu döndüren birString()yöntemi ekle:User: Name (Email)main.go: Kitaplar ve kullanıcılar oluşturmak için girdileri okuyup ardından bilgilerini görüntüleyerek her şeyi bir araya getir.Oluşturulacak kitapların sayısını oku. Her kitap için ID'sini, başlığını ve yazarını ayrı satırlarda oku. Ardından kullanıcıların sayısını oku ve her kullanıcı için ID'sini, adını ve e-posta adresini ayrı satırlarda oku.
Tüm öğeleri oluşturduktan sonra her kitabın dize gösterimini kendi satırında, ardından her kullanıcının dize gösterimini kendi satırında yazdır.
Aşağıdaki girdiler sağlanacaktır:
- Kitap sayısı
- Her kitap için: ID, başlık ve yazar (her biri ayrı satırlarda)
- Kullanıcı sayısı
- Her kullanıcı için: ID, ad ve e-posta adresi (her biri ayrı satırlarda)
Örneğin, şu verildiğinde:
2
B001
The Go Programming Language
Alan Donovan
B002
Clean Code
Robert Martin
1
U001
Alice Smith
alice@library.comÇıktın şu olmalıdır:
[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)Şu verildiğinde:
1
B100
Design Patterns
Gang of Four
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.comÇıktın şu olmalıdır:
[B100] Design Patterns by Gang of Four
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)Bu temel yapı, proje boyunca geliştireceğin temel veri modellerini oluşturur. Sonraki derste bu yapıları geliştirecek ve ödünç alma işlevselliğini ekleyeceksin!
Kendin dene
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
// Kitap sayısını oku
numBooksStr, _ := reader.ReadString('\n')
numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))
// TODO: Kitapları saklamak için bir slice oluşturun
// TODO: Her kitabın bilgisini (ayrı satırlarda ID, title, author) okuyun
// ve NewBook kullanarak Book nesneleri oluşturun
for i := 0; i < numBooks; i++ {
id, _ := reader.ReadString('\n')
id = strings.TrimSpace(id)
title, _ := reader.ReadString('\n')
title = strings.TrimSpace(title)
author, _ := reader.ReadString('\n')
author = strings.TrimSpace(author)
// TODO: Yeni bir kitap oluşturun ve onu slice'ınıza ekleyin
}
// Kullanıcı sayısını oku
numUsersStr, _ := reader.ReadString('\n')
numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))
// TODO: Kullanıcıları saklamak için bir slice oluşturun
// TODO: Her kullanıcının bilgisini (ayrı satırlarda ID, name, email) okuyun
// ve NewUser kullanarak User nesneleri oluşturun
for i := 0; i < numUsers; i++ {
id, _ := reader.ReadString('\n')
id = strings.TrimSpace(id)
name, _ := reader.ReadString('\n')
name = strings.TrimSpace(name)
email, _ := reader.ReadString('\n')
email = strings.TrimSpace(email)
// TODO: Yeni bir kullanıcı oluşturun ve onu slice'ınıza ekleyin
}
// TODO: Her kitabın dize (string) temsilini yazdırın
// TODO: Her kullanıcının dize (string) temsilini yazdırın
fmt.Println("TODO: Print output here")
}
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 Pool12İleri Düzey OOP Kavramları
Functional Options DeseniGo'da Builder DeseniMetot ZincirlemeTür Takma Adları vs. TanımlamalarReflection TemelleriKod Üretimine Genel Bakış15Proje: Kütüphane Yönetimi
Projeye Genel Bakış ve YapıKitap ve Kullanıcı Struct'larıKendi başına pratik yap: Online Go derleyicisi