Ikhtisar dan Struktur Proyek
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 98 dari 107.
Tantangan
MudahMari kita mulai proyek Library Management System dengan menyiapkan struktur dasarnya! Pada langkah pertama ini, kamu akan membuat kerangka dasar yang akan mendukung semua fitur yang akan kita bangun pada pelajaran berikutnya.
Kamu akan mengatur kodemu dalam tiga file untuk memisahkan tanggung jawab dengan jelas:
book.go: Definisikan structBookyang merepresentasikan buku perpustakaan. Setiap buku harus memilikiID,Title,Author, dan statusAvailable(boolean). Buat fungsi konstruktorNewBookyang menerima ID, judul, dan penulis sebagai parameter, lalu mengembalikan pointer ke Book baru denganAvailableyang secara default diatur ketrue. Tambahkan juga methodString()yang mengembalikan informasi buku dalam format:[ID] Title by Authoruser.go: Definisikan structUseryang merepresentasikan anggota perpustakaan dengan fieldID,Name, danEmail. Buat fungsi konstruktorNewUseryang menerima ketiga nilai tersebut dan mengembalikan pointer ke User baru. Tambahkan methodString()yang mengembalikan:User: Name (Email)main.go: Satukan semuanya dengan membaca input untuk membuat buku dan pengguna, lalu tampilkan informasi mereka.Baca jumlah buku yang akan dibuat. Untuk setiap buku, baca ID, judul, dan penulisnya pada baris terpisah. Lalu baca jumlah pengguna, dan untuk setiap pengguna baca ID, nama, dan email mereka pada baris terpisah.
Setelah membuat semua item, cetak representasi string setiap buku pada barisnya sendiri, lalu representasi string setiap pengguna pada barisnya sendiri.
Input berikut akan diberikan:
- Jumlah buku
- Untuk setiap buku: ID, judul, dan penulis (masing-masing pada baris terpisah)
- Jumlah pengguna
- Untuk setiap pengguna: ID, nama, dan email (masing-masing pada baris terpisah)
Contohnya, jika diberikan:
2
B001
The Go Programming Language
Alan Donovan
B002
Clean Code
Robert Martin
1
U001
Alice Smith
alice@library.comOutput kamu seharusnya:
[B001] The Go Programming Language by Alan Donovan
[B002] Clean Code by Robert Martin
User: Alice Smith (alice@library.com)Dan jika diberikan:
1
B100
Design Patterns
Gang of Four
2
U001
Bob Jones
bob@email.com
U002
Carol White
carol@email.comOutput kamu seharusnya:
[B100] Design Patterns by Gang of Four
User: Bob Jones (bob@email.com)
User: Carol White (carol@email.com)Fondasi ini menetapkan model data inti yang akan kamu kembangkan sepanjang proyek. Pada pelajaran berikutnya, kamu akan menyempurnakan struct ini dan menambahkan fungsionalitas peminjaman!
Coba sendiri
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
// Baca jumlah buku
numBooksStr, _ := reader.ReadString('\n')
numBooks, _ := strconv.Atoi(strings.TrimSpace(numBooksStr))
// TODO: Buat slice untuk menyimpan buku
// TODO: Baca informasi setiap buku (ID, judul, penulis pada baris terpisah)
// dan buat object Book menggunakan NewBook
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: Buat buku baru dan tambahkan ke slice-mu
}
// Baca jumlah pengguna
numUsersStr, _ := reader.ReadString('\n')
numUsers, _ := strconv.Atoi(strings.TrimSpace(numUsersStr))
// TODO: Buat slice untuk menyimpan pengguna
// TODO: Baca informasi setiap pengguna (ID, nama, email pada baris terpisah)
// dan buat object User menggunakan NewUser
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: Buat pengguna baru dan tambahkan ke slice-mu
}
// TODO: Cetak representasi string setiap buku
// TODO: Cetak representasi string setiap pengguna
fmt.Println("TODO: Print output here")
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP di Go
File EksternalWorkspace Go dan modulePaket dan ImporNama yang Diekspor dan Tidak DieksporPengantar OOP di Gostruct sebagai classMendefinisikan method pada structPointer receiver vs value receiverInisialisasi structFungsi KonstruktorUlasan: Kalkulator Sederhana4Interface
Pengenalan InterfaceImplementasi ImplisitInterface sebagai KontrakInterface Kosong (any)Type AssertionType SwitchKomposisi InterfaceInterface Stringer & ErrorUlasan: Kalkulator Bentuk7Enkapsulasi
Field yang Diekspor vs Tidak DieksporEnkapsulasi Tingkat PackageMethod Getter dan SetterPenyembunyian Informasi di GoRingkasan: Data Siswa10Generics (Go 1.18+)
Pengantar GenericsParameter TipeBatasan TipeStruct GenerikCara Alternatif untuk Method GenerikRingkasan Koleksi Generik2Mendalami Tipe dan Struct
Tipe Dasar dan KompositDefinisi Tipe KustomTag StructStruct AnonimStruct BersarangNilai Nol dan Nilai BawaanRangkuman: Buku Kontak5Komposisi daripada Pewarisan
Mengapa Go Tidak Memiliki PewarisanDasar Penyematan StructPromosi methodMenyematkan Beberapa StructPenyematan vs AgregasiMembayangi method yang DisematkanRangkuman: Hierarki Karyawan8Penanganan Error & OOP
Interface errorTipe Error KustomPembungkusan Error (fmt.Errorf)Error Sentinelerrors.Is() dan errors.As()Panic, Defer, dan RecoverRangkuman: Parser File3Pointer dan Memori
Dasar-Dasar Pointer di GoPointer ke StructPass by Value vs ReferenceFungsi new()Garbage Collection di GoRekap: Pembuat Linked List6Polimorfisme di Go
Polimorfisme melalui InterfaceDuck Typing di GoAturan Pemenuhan InterfaceKoleksi PolimorfikInjeksi DependensiRangkuman: Pemroses Pembayaran9Konkruensi & OOP
Dasar-dasar GoroutineChannel & KomunikasiChannel Ber-buffer vs Tanpa BufferPernyataan selectsync.Mutex & sync.RWMutexsync.WaitGroupDesain Struct yang Aman untuk ThreadRingkasan: Worker Pool12Konsep OOP Lanjutan
Pola Opsi FungsionalPola Builder di GoMethod ChainingAlias Tipe vs DefinisiDasar-Dasar ReflectionGambaran Umum Pembuatan Kode15Proyek: Manajemen Library
Ikhtisar dan Struktur ProyekStruct Buku dan PenggunaLatihan sendiri: Compiler Go online