0Pricing
Go Academy · Pelajaran

Promosi Method

Warisi method melalui embedding

Promosi Method adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Mewarisi Metode melalui Penyematan

Ketika Anda menyematkan suatu tipe, metodenya juga dipromosikan. Tipe luar dapat memanggilnya seolah-olah tipe tersebut mendefinisikannya sendiri—versi pewarisan khas Go.

Metode yang Dipromosikan

Car menyematkan Engine dan memperoleh metode Start secara cuma-cuma.

package main

import "fmt"

type Engine struct{}

func (Engine) Start() { fmt.Println("engine started") }

type Car struct{ Engine }

func main() {
	c := Car{}
	c.Start()
}

Metode Beroperasi pada Nilai yang Disematkan

Metode yang dipromosikan berjalan pada field yang disematkan, bukan pada struct luar. Metode tersebut tidak dapat melihat field lain milik struct luar.

package main

import "fmt"

type Counter struct{ n int }

func (c *Counter) Inc() { c.n++ }
func (c Counter) Get() int { return c.n }

type Widget struct{ Counter }

func main() {
	w := Widget{}
	w.Inc()
	w.Inc()
	fmt.Println(w.Get())
}

Mengganti Metode

Definisikan metode dengan nama yang sama pada struct luar untuk mengganti metode yang dipromosikan. Metode luar memiliki prioritas.

package main

import "fmt"

type Animal struct{}

func (Animal) Speak() string { return "..." }

type Dog struct{ Animal }

func (Dog) Speak() string { return "Woof" }

func main() {
	fmt.Println(Dog{}.Speak())
}

Memanggil Versi yang Disematkan

Bahkan setelah mengganti metode, Anda tetap dapat mengakses versi asli melalui nama tipe yang disematkan.

package main

import "fmt"

type Animal struct{}

func (Animal) Speak() string { return "generic" }

type Dog struct{ Animal }

func (d Dog) Speak() string { return "Woof + " + d.Animal.Speak() }

func main() {
	fmt.Println(Dog{}.Speak())
}

Promosi dan Antarmuka

Karena metode yang dipromosikan menjadi bagian dari kumpulan metode tipe luar, tipe luar dapat memenuhi antarmuka menggunakan metode dari tipe yang disematkan.

package main

import "fmt"

type Stringer interface{ String() string }
type Base struct{ name string }

func (b Base) String() string { return b.name }

type Wrapper struct{ Base }

func main() {
	var s Stringer = Wrapper{Base{"hi"}}
	fmt.Println(s.String())
}

Kumpulan Metode Pointer vs Nilai

Jika tipe yang disematkan memiliki metode dengan penerima pointer, hanya pointer ke struct luar (atau nilai yang alamatnya dapat diambil) yang memperoleh metode tersebut dalam kumpulan metodenya.

Penyematan untuk Perilaku Bawaan

Sematkan tipe yang menyediakan metode bawaan yang masuk akal, lalu ganti hanya beberapa metode yang perlu Anda sesuaikan—pola penggunaan ulang yang sangat kuat.

package main

import "fmt"

type DefaultHandler struct{}

func (DefaultHandler) Handle() string { return "default" }

type CustomHandler struct{ DefaultHandler }

func (CustomHandler) Handle() string { return "custom" }

func main() {
	fmt.Println(CustomHandler{}.Handle())
}

Tidak Ada Polimorfisme Sejati

Tidak seperti OOP klasik, metode yang disematkan tidak memanggil kembali penggantian pada struct luar. Go tidak memiliki pemilihan metode virtual secara dinamis melalui penyematan.

Promosi melalui Beberapa Tingkat

Metode dipromosikan secara transitif: jika A menyematkan B dan B menyematkan C, A juga memperoleh metode C, selama tidak ada ambiguitas.

Kapan Promosi Membantu

  • Menggunakan kembali perilaku tanpa menulis ulang
  • Menyediakan perilaku bawaan yang dapat Anda ganti
  • Memenuhi antarmuka melalui metode yang disematkan

Pemeriksaan Singkat

Ujilah pengetahuan Anda tentang promosi metode.

Ringkasan

Anda telah mempelajari promosi metode.

  • Metode yang disematkan dipromosikan ke tipe luar
  • Metode luar menggantikan metode yang dipromosikan
  • Akses versi asli melalui nama tipe yang disematkan
  • Promosi membantu memenuhi antarmuka, tetapi tidak ada pemilihan metode virtual secara dinamis

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Promosi Method” gratis?

Ya — teks lengkap “Promosi Method” 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 “Promosi Method”?

Warisi method melalui embedding 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 3 dari 4.

Berapa lama pelajaran “Promosi Method” 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