Method di Go
Method adalah fungsi yang "terikat" pada sebuah tipe (biasanya struct). Method dideklarasikan dengan menambahkan receiver sebelum nama fungsi.
Sintaks
func (r ReceiverType) NamaMethod() ReturnType {
// body
}
Contoh: Value Receiver
type Persegi struct {
Sisi float64
}
func (p Persegi) Luas() float64 {
return p.Sisi * p.Sisi
}
func (p Persegi) Keliling() float64 {
return 4 * p.Sisi
}
func main() {
kotak := Persegi{Sisi: 5}
fmt.Println("Luas:", kotak.Luas()) // 25
fmt.Println("Keliling:", kotak.Keliling()) // 20
}
Pointer Receiver
Gunakan pointer receiver jika method perlu mengubah data struct:
func (p *Persegi) Resize(faktor float64) {
p.Sisi *= faktor
}
kotak := Persegi{Sisi: 5}
kotak.Resize(2)
fmt.Println(kotak.Sisi) // 10
Kapan Value vs Pointer Receiver?
- Value receiver — Method tidak mengubah state (read-only)
- Pointer receiver — Method perlu mengubah state, atau struct berukuran besar (menghindari copy)
Method pada Tipe Lain
Method bisa ditambahkan ke tipe apapun yang kamu definisikan:
type MyString string
func (s MyString) Teriak() string {
return strings.ToUpper(string(s)) + "!!!"
}
pesan := MyString("halo")
fmt.Println(pesan.Teriak()) // "HALO!!!"