Komposisi, Bukan Pewarisan
Filosofi desain Go
Komposisi, Bukan Pewarisan adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Go Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Go Academy mencakup 4 pelajaran total.
Filosofi Desain Go
Go sengaja tidak menyertakan pewarisan kelas. Pendekatan idiomatisnya adalah komposisi: membangun perilaku dengan menggabungkan tipe dan antarmuka kecil.
Mengapa Bukan Pewarisan
Pohon pewarisan yang dalam rapuh: perubahan pada kelas dasar menyebar secara tidak terduga. Komposisi menjaga hubungan tetap eksplisit dan fleksibel.
Memiliki daripada Menjadi
Alih-alih memodelkan "seorang Pengelola adalah seorang Karyawan", modelkan "seorang Pengelola memiliki data dan kemampuan seorang Karyawan" melalui penyematan atau atribut.
package main
import "fmt"
type Employee struct{ Name string }
func (e Employee) Work() string { return e.Name + " works" }
type Manager struct {
Employee
Reports int
}
func main() {
m := Manager{Employee{"Lin"}, 3}
fmt.Println(m.Work(), "-", m.Reports, "reports")
}Memprogram terhadap Antarmuka
Tentukan perilaku dengan antarmuka kecil, lalu terima antarmuka tersebut. Implementasinya dapat dipertukarkan dan mudah diganti atau dibuat tiruannya.
package main
import "fmt"
type Notifier interface{ Notify(msg string) }
type Email struct{}
func (Email) Notify(msg string) { fmt.Println("email:", msg) }
func alert(n Notifier, m string) { n.Notify(m) }
func main() {
alert(Email{}, "deploy done")
}Menukar Implementasi
Karena fungsi tersebut bergantung pada sebuah antarmuka, Anda dapat meneruskan implementasi apa pun tanpa mengubah fungsi tersebut.
package main
import "fmt"
type Notifier interface{ Notify(msg string) }
type Email struct{}
type SMS struct{}
func (Email) Notify(m string) { fmt.Println("email:", m) }
func (SMS) Notify(m string) { fmt.Println("sms:", m) }
func alert(n Notifier, m string) { n.Notify(m) }
func main() {
alert(Email{}, "hi")
alert(SMS{}, "hi")
}Menggabungkan Perilaku
Sematkan beberapa komponen kecil untuk menyusun tipe yang kaya fitur dari bagian-bagian yang independen dan dapat diuji.
package main
import "fmt"
type Logger struct{}
func (Logger) Log(s string) { fmt.Println("log:", s) }
type Cache struct{ data map[string]string }
func (c Cache) Get(k string) string { return c.data[k] }
type Service struct {
Logger
Cache
}
func main() {
s := Service{Cache: Cache{data: map[string]string{"k": "v"}}}
s.Log("started")
fmt.Println(s.Get("k"))
}Injeksi Dependensi
Teruskan dependensi sebagai antarmuka ke dalam konstruktor, bukan dengan menetapkannya secara langsung. Inilah penerapan komposisi pada proses penyambungan komponen.
package main
import "fmt"
type Store interface{ Save(s string) }
type MemStore struct{ items []string }
func (m *MemStore) Save(s string) { m.items = append(m.items, s) }
type App struct{ store Store }
func NewApp(s Store) *App { return &App{store: s} }
func main() {
app := NewApp(&MemStore{})
app.store.Save("x")
fmt.Println("saved")
}Antarmuka Kecil Lebih Unggul
Semakin kecil sebuah antarmuka, semakin banyak tipe yang dapat memenuhinya dan semakin mudah antarmuka tersebut diuji. Semakin besar antarmukanya, semakin lemah abstraksinya.
Menghindari Kelas Dasar yang Rapuh
Tanpa pewarisan, tidak ada kelas dasar yang dapat rusak. Setiap bagian yang dikomposisikan berkembang secara independen sehingga keterkaitannya berkurang.
Terima Antarmuka, Kembalikan Struktur
Pedoman umum Go: fungsi menerima antarmuka sebagai masukan yang fleksibel dan mengembalikan struktur konkret sebagai keluaran yang jelas serta siap digunakan.
Daftar Periksa Komposisi
- Modelkan memiliki, bukan menjadi
- Sematkan komponen kecil
- Bergantung pada antarmuka kecil
- Suntikkan dependensi
Pemeriksaan Singkat
Uji pemahaman Anda tentang filosofi komposisi.
Ringkasan
Anda telah mempelajari filosofi komposisi Go.
- Tanpa pewarisan; gunakan komposisi dengan penyematan + antarmuka
- Modelkan memiliki daripada menjadi
- Programkan terhadap antarmuka kecil, lalu suntikkan dependensi
- Terima antarmuka, kembalikan struktur
Belajar Go dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Komposisi, Bukan Pewarisan” gratis?
Ya — teks lengkap “Komposisi, Bukan Pewarisan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Go Academy, upgrade ke CoddyKit PRO. Kursus Go Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Komposisi, Bukan Pewarisan”?
Filosofi desain Go Kamu berlatih Go Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Go Academy?
Tidak diperlukan pengalaman sebelumnya. Go Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Komposisi, Bukan Pewarisan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Embedding Struct
- Embedding Interface
- Promosi Method
- Komposisi, Bukan Pewarisan