Go Academy · Pelajaran

Komposisi, Bukan Pewarisan

Filosofi desain Go

Pelajaran 4 dari 413 langkah

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
Gratis untuk memulai

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

  1. Embedding Struct
  2. Embedding Interface
  3. Promosi Method
  4. Komposisi, Bukan Pewarisan
← Kembali ke Go Academy