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
KolayKütüphane Yönetim Sistemi projesine temel yapıyı kurarak başlayalım! Bu ilk adımda, gelecek derslerde inşa edeceğimiz tüm özellikleri destekleyecek temel iskeleyi oluşturacaksınız.
Kodunuzu, sorumlulukların temiz bir şekilde ayrılmasını sağlamak için üç dosya halinde düzenleyeceksiniz:
book.go: Bir kütüphane kitabını temsil eden birBookstruct'ı tanımlayın. Her kitabın birID,Title,AuthorveAvailabledurumu (boolean) olmalıdır. ID, başlık ve yazarı parametre olarak alan ve varsayılan olarakAvailabledeğeritrueolarak ayarlanmış yeni bir Book'a işaretçi (pointer) döndüren birNewBookyapıcı (constructor) fonksiyonu oluşturun. Ayrıca, kitap bilgilerini şu formatta döndüren birString()metodu ekleyin:[ID] Title by Authoruser.go:ID,NameveEmailalanlarına sahip bir kütüphane üyesini temsil eden birUserstruct'ı tanımlayın. Her üç değeri de alan ve yeni bir User'a işaretçi döndüren birNewUseryapıcı fonksiyonu oluşturun. Şu formatı döndüren birString()metodu ekleyin:User: Name (Email)main.go: Kitap ve kullanıcı oluşturmak için girdileri okuyarak ve ardından bilgilerini görüntüleyerek her şeyi bir araya getirin.Oluşturulacak kitap sayısını okuyun. Her kitap için ID, başlık ve yazarı ayrı satırlarda okuyun. Ardından kullanıcı sayısını okuyun ve her kullanıcı için ID, isim ve e-postayı ayrı satırlarda okuyun.
Tüm öğeleri oluşturduktan sonra, her kitabın dize temsilini kendi satırına, ardından her kullanıcının dize temsilini kendi satırına yazdırın.
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, isim ve e-posta (her biri ayrı satırlarda)
Örneğin, şu girdi verildiğinde:
2
B001
The Go Programming Language
Alan Donovan
B002
Clean Code
Robert Martin
1
U001
Alice Smith
alice@library.comÇıktınız şu olmalıdır:
[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)Ve şu girdi verildiğinde:
1
B100
Design Patterns
Gang of Four
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
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)Bu temel, proje boyunca genişleteceğiniz çekirdek veri modellerini oluşturur. Bir sonraki derste, bu struct'ları geliştirecek ve ödünç alma işlevini ekleyeceksiniz!
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ı