Proyek Akhir: Aplikasi Inventori
Menggabungkan struct, map, method, pointer, dan error dalam satu aplikasi.
Selamat sampai di proyek akhir!
Di bab ini kamu membangun inti sebuah aplikasi inventori toko dengan konsep dari seluruh course: struct, map, method dengan pointer receiver, error handling, dan slice.
Rancangan
type Inventori struct {
stok map[string]int
}
Sebuah Inventori menyimpan jumlah stok tiap barang di sebuah map. Method yang dibutuhkan:
| Method | Tugas |
|---|---|
| --- | --- |
Tambah(nama string, jumlah int) | menambah stok (membuat barang baru jika belum ada) |
Kurangi(nama string, jumlah int) error | mengurangi stok; error bila barang tidak ada atau stok kurang |
Stok(nama string) int | mengembalikan jumlah stok (0 bila tidak ada) |
Jenis() int | jumlah jenis barang |
Kenapa pointer receiver?
Tambah dan Kurangi mengubah isi inventori, jadi receiver-nya harus pointer (i *Inventori). (Map sendiri adalah reference type, tetapi konsisten memakai pointer receiver adalah kebiasaan yang baik untuk struct yang punya state.)
Constructor
func NewInventori() *Inventori {
return &Inventori{stok: make(map[string]int)}
}
Map harus dibuat dengan make sebelum ditulisi.
Pesan error
Gunakan fmt.Errorf agar pesannya informatif:
return fmt.Errorf("stok %s kurang (tersedia %d, diminta %d)", nama, tersedia, jumlah)
dan untuk barang yang tidak ada: fmt.Errorf("barang %s tidak ditemukan", nama).
Langkah pengerjaan
- Tulis
Tambah— cukupi.stok[nama] += jumlah(zero value map membuat ini aman!). - Tulis
Stok— membaca map langsung. - Tulis
Jenis—len(i.stok). - Tulis
Kurangi— periksa ada/tidak, periksa cukup/tidak, lalu kurangi.
Ide pengembangan setelah course
- Simpan data ke file JSON dengan paket
encoding/json. - Buat antarmuka CLI dengan
bufio.Scanneratau paketflag. - Ubah menjadi REST API dengan
net/http. - Tambahkan unit test dengan paket
testingdan jalankango test. - Lindungi map dengan
sync.RWMutexagar aman dipakai banyak goroutine.
Setelah lulus bab ini, kerjakan quiz akhir. Nilai minimal 70 membuka sertifikat kelulusanmu. Selamat — kamu sudah menguasai dasar Go! 🎉