Kitap ve Kullanıcı Struct'ları
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 99 / 107.
Görev
KolayKütüphane Yönetim Sistemimiz için temel veri modellerini oluşturalım! Kitapları ve kütüphane üyelerini temsil eden temel struct'ları, onları mantıklı varsayılan değerlerle başlatan yapıcı (constructor) fonksiyonlarla birlikte oluşturacaksınız.
Kodunuzu üç dosya halinde düzenleyeceksiniz:
book.go:ID,Title,Author,ISBNveAvailable(boolean) alanlarına sahipBookstruct'ınızı tanımlayın. Parametre olarak ID, title, author ve ISBN alan ve yeni bir Book'a işaret eden bir pointer döndüren birNewBookyapıcı fonksiyonu oluşturun. Yeni kitaplar her zaman kullanılabilir (available) olarak başlamalıdır. Kitabın ayrıntılarını şu formatta döndüren birInfo()metodu ekleyin:[ID] "Title" by Author (ISBN: [isbn]) - Available: [true/false]user.go:ID,Name,EmailveBorrowedBooks(kitap ID'lerini saklamak için bir string dilimi/slice) alanlarına sahipUserstruct'ınızı tanımlayın. ID, name ve email alan, boş bir ödünç alınan kitaplar listesiyle yeni bir User'a işaret eden bir pointer döndüren birNewUseryapıcı fonksiyonu oluşturun. Şunu döndüren birInfo()metodu ekleyin:Member: [Name] ([Email]) - Books borrowed: [count]main.go: Girdiden kitaplar ve kullanıcılar oluşturup ardından bilgilerini görüntüleyerek modellerinizi bir araya getirin.Kitap sayısını okuyun, ardından her kitap için ID, title, author ve ISBN bilgilerini ayrı satırlarda okuyun. Sonra, kullanıcı sayısını okuyun ve her kullanıcı için ID, name ve email bilgilerini ayrı satırlarda okuyun.
Her kitabın bilgisini kendi satırında, ardından her kullanıcının bilgisini kendi satırında yazdırın.
Aşağıdaki girdiler sağlanacaktır:
- Kitap sayısı
- Her kitap için: ID, title, author, ISBN (her biri ayrı satırlarda)
- Kullanıcı sayısı
- Her kullanıcı için: ID, name, email (her biri ayrı satırlarda)
Örneğin, şu girdi verildiğinde:
2
B001
The Go Programming Language
Alan Donovan
978-0134190440
B002
Clean Code
Robert Martin
978-0132350884
1
U001
Alice Smith
alice@library.comÇıktınız şu olmalıdır:
[B001] "The Go Programming Language" by Alan Donovan (ISBN: 978-0134190440) - Available: true
[B002] "Clean Code" by Robert Martin (ISBN: 978-0132350884) - Available: true
Member: Alice Smith (alice@library.com) - Books borrowed: 0Ve şu girdi verildiğinde:
1
B100
Design Patterns
Gang of Four
978-0201633610
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.comÇıktınız şu olmalıdır:
[B100] "Design Patterns" by Gang of Four (ISBN: 978-0201633610) - Available: true
Member: Bob Jones (bob@email.com) - Books borrowed: 0
Member: Carol White (carol@email.com) - Books borrowed: 0Yapıcıların varsayılan değerleri nasıl işlediğine dikkat edin; kitaplar kullanılabilir durumda başlar ve kullanıcılar sıfır ödünç alınmış kitapla başlar. Doğru başlatmayı sağlamak için yapıcı fonksiyonları kullanma kalıbı, güvenilir sistemler oluşturmanın temelidir!
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ştur
// Her bir kitabın detaylarını oku
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)
isbn, _ := reader.ReadString('\n')
isbn = strings.TrimSpace(isbn)
// TODO: NewBook kurucusunu kullanarak yeni bir kitap oluştur ve slice'a ekle
}
// 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ştur
// Her bir kullanıcının detaylarını oku
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: NewUser kurucusunu kullanarak yeni bir kullanıcı oluştur ve slice'a ekle
}
// TODO: Info() metodunu kullanarak her bir kitabın bilgisini yazdır
// TODO: Info() metodunu kullanarak her bir kullanıcının bilgisini yazdır
fmt.Println() // Yer tutucu - uygularken kaldırın
}
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ı