Method
Fungsi yang menempel pada tipe.
Pahami konsepnya
Method adalah fungsi yang menempel pada sebuah tipe. Receiver ditulis di antara func dan nama method: func (s *Siswa) Tambah(p int). Receiver seperti parameter pertama yang tidak tertulis — di dalam method, isinya bisa diakses lewat namanya (s).
Receiver nilai (s Siswa) bekerja pada salinan: method bisa membaca semua field tetapi perubahannya tidak menetap. Receiver pointer (s *Siswa) bekerja pada aslinya: field bisa diubah dan struct besar tidak perlu disalin. Aturan praktisnya: mulai dari pointer receiver bila method mengubah data atau structnya besar; konsisten satu gaya dalam satu tipe.
Method membuat kode terbaca seperti kalimat: ari.Tambah(25) atau waktu.Add(jam). String bawaan Go tidak memiliki method ToUpper; gunakan fungsi strings.ToUpper(teks). Ekspresi seperti v.Logika disebut method value: potongan method yang terikat pada nilai tertentu dan bisa diperlakukan sebagai fungsi biasa.
Coba contoh kode
package main
import "fmt"
type Siswa struct {
Nama string
Poin int
}
func (s *Siswa) Tambah(p int) {
s.Poin += p
}
func (s Siswa) Label() string {
return fmt.Sprintf("%s (%d poin)", s.Nama, s.Poin)
}
func main() {
ari := Siswa{Nama: "Ari", Poin: 10}
ari.Tambah(25)
fmt.Println(ari.Label())
}Tambah memakai receiver pointer karena mengubah field — kenaikan Poin tersimpan pada ari sendiri. Label memakai receiver nilai karena hanya membaca; hasilnya string baru. Go otomatis mengubah ari.Tambah(25) menjadi (&ari).Tambah(25), jadi pemanggilannya tetap mulus.
Method pada tipe buatan sendiri
type Celcius float64
func (c Celcius) Fahrenheit() float64 {
return float64(c)*9/5 + 32
}
func (c Celcius) Beku() bool {
return c <= 0
}
func main() {
suhu := Celcius(25.5)
fmt.Println(suhu.Fahrenheit(), suhu.Beku()) // 77.9 false
}Method tidak hanya untuk struct — tipe apa pun yang kamu definisikan (berbasis float64, string, slice) bisa punya method. Celcius menjadi tipe bernama dengan perilakunya sendiri, membuat kode domain (suhu, mata uang, jarak) terbaca jelas.
Latihan singkat
Uji: tambahkan method Kurang dan Lulus (poin >= 70) — program harus mencetak persis `true`.