Metode pada Struct
Receiver nilai dibandingkan receiver pointer
Metode pada Struct adalah pelajaran Go Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.
Apa Itu Metode
Metode adalah fungsi dengan argumen penerima. Penerima berada di antara kata kunci func dan nama metode, sehingga mengikat fungsi ke suatu tipe.
Penerima Nilai
Penerima nilai menerima salinan struktur. Gunakan saat metode tidak perlu mengubah keadaan:
package main
import "fmt"
type Circle struct{ Radius float64 }
func (c Circle) Area() float64 {
return 3.14159 * c.Radius * c.Radius
}
func main() {
c := Circle{Radius: 5}
fmt.Printf("%.2f\n", c.Area()) // 78.54
}Penerima Penunjuk
Penerima penunjuk memungkinkan metode mengubah struktur. Lebih efisien untuk struktur besar:
package main
import "fmt"
type Counter struct{ N int }
func (c *Counter) Increment() { c.N++ }
func (c *Counter) Reset() { c.N = 0 }
func main() {
c := Counter{}
c.Increment(); c.Increment()
fmt.Println(c.N) // 2
c.Reset()
fmt.Println(c.N) // 0
}Kapan Menggunakan Penerima Penunjuk
Gunakan penerima penunjuk saat:
- Metode perlu mengubah penerima
- Strukturnya besar, sehingga menghindari penyalinan
- Konsistensi diperlukan: jika salah satu metode memiliki penerima penunjuk, semuanya harus demikian
Gunakan penerima nilai saat strukturnya kecil dan metode hanya membaca data.
Ekspresi dan Nilai Metode
Metode dapat digunakan sebagai nilai kelas satu:
package main
import "fmt"
type Adder struct{ Base int }
func (a Adder) Add(n int) int { return a.Base + n }
func main() {
a := Adder{Base: 10}
fn := a.Add // method value — bound to a
fmt.Println(fn(5)) // 15
}Metode pada Tipe Nonstruktur
Anda dapat menentukan metode pada tipe bernama apa pun dalam paket yang sama, bukan hanya struktur:
package main
import "fmt"
type Celsius float64
func (c Celsius) ToFahrenheit() float64 {
return float64(c)*9/5 + 32
}
func main() {
t := Celsius(100)
fmt.Println(t.ToFahrenheit()) // 212
}Dereferensi Penunjuk Otomatis
Go otomatis mengambil alamat atau melakukan dereferensi saat memanggil metode. Anda tidak perlu menulis (&c).Method() secara manual:
package main
import "fmt"
type Box struct{ Val int }
func (b *Box) Double() { b.Val *= 2 }
func main() {
b := Box{Val: 5}
b.Double() // Go auto-takes address
fmt.Println(b.Val) // 10
}Merangkai Metode
Kembalikan penunjuk penerima agar perangkaian metode dapat dilakukan (pola pembangun):
package main
import "fmt"
type Builder struct{ result string }
func (b *Builder) Add(s string) *Builder {
b.result += s
return b
}
func (b *Builder) Build() string { return b.result }
func main() {
s := (&Builder{}).Add("Hello").Add(", ").Add("World").Build()
fmt.Println(s)
}Metode Teks (fmt.Stringer)
Implementasikan metode String() string untuk mengatur cara suatu tipe dicetak:
package main
import "fmt"
type Point struct{ X, Y int }
func (p Point) String() string {
return fmt.Sprintf("(%d, %d)", p.X, p.Y)
}
func main() {
p := Point{3, 4}
fmt.Println(p) // (3, 4)
}Penerima Penunjuk nil
Metode dengan penerima penunjuk dapat dipanggil pada penunjuk bernilai nil—berguna untuk perilaku bawaan:
package main
import "fmt"
type Node struct{ Val int }
func (n *Node) Value() int {
if n == nil { return 0 }
return n.Val
}
func main() {
var n *Node
fmt.Println(n.Value()) // 0
}Prinsip Konsistensi
Dalam pustaka standar Go dan Go idiomatis, semua metode pada suatu tipe menggunakan jenis penerima yang sama—semuanya penunjuk atau semuanya nilai. Mencampurnya dapat menyebabkan bug tersembunyi pada antarmuka.
Pemeriksaan Singkat
Jenis penerima apa yang memungkinkan metode mengubah anggota struktur?
Ringkasan: Metode
Hal-hal penting:
- Metode memiliki penerima di antara
funcdan nama metode - Penerima nilai: hanya membaca, untuk struktur kecil
- Penerima penunjuk: perubahan, struktur besar, dan konsistensi
- Go melakukan dereferensi otomatis—tidak perlu menulis
(&v).Method() - Implementasikan
String() stringuntuk pencetakan khusus
Latihan
Tentukan struktur BankAccount dengan anggota Balance float64. Tambahkan metode penerima penunjuk Deposit dan Withdraw, serta metode penerima nilai String().
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Metode pada Struct” gratis?
Ya — teks lengkap “Metode pada Struct” 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 “Metode pada Struct”?
Receiver nilai dibandingkan receiver pointer 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 2 dari 4.
Berapa lama pelajaran “Metode pada Struct” 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.