irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Go'da "Class" Metotları
Daha önce Go'da class olmadığını söylemiştik. Peki nesnelere (Struct'lara) nasıl yetenek (fonksiyon) kazandıracağız? Cevap: Metotlar.Bir fonksiyonu, özel bir Alıcı (Receiver) ile tanımladığınızda, o fonksiyon artık o tipin bir metodu olur.
Metot Tanımlama Sözdizimi
Normal fonksiyondan tek farkı, func kelimesi ile fonksiyon ismi arasına parantez içinde alıcı tipini yazmaktır.
Kod:
package main
import "fmt"
type Dikdortgen struct {Genislik, Yukseklik int}
// "Dikdortgen" tipine "Alan" adında bir metot ekliyoruz.// (d Dikdortgen) kısmı RECEIVER'dır.func (d Dikdortgen) Alan() int {return d.Genislik * d.Yukseklik}
func main() {kutu := Dikdortgen{10, 5}
// Artık nokta (.) ile metoda erişebiliriz<br>sonuc := kutu.Alan()<br><br>fmt.Println("Alan:", sonuc)<br>
}
Kritik Ayrım: Value vs. Pointer Receiver
Bir metot struct'ın verilerini değiştirecekse, alıcıyı mutlaka Pointer olarak tanımlamalısınız.
Kod:
type Oyuncu struct {Puan int}
// Bu metot orijinal puanı DEĞİŞTİREMEZ (Kopyasını alır)func (o Oyuncu) PuanEkleYanlis(miktar int) {o.Puan += miktar}
// Bu metot orijinal puanı DEĞİŞTİRİR (Adresini alır)// Receiver kısmındaki yıldız (*) işaretine dikkat!func (o *Oyuncu) PuanEkleDogru(miktar int) {o.Puan += miktar}
func main() {p1 := Oyuncu{Puan: 0}
p1.PuanEkleYanlis(10)<br>fmt.Println(p1.Puan) // Çıktı: 0 (Hala aynı)<br><br>p1.PuanEkleDogru(10)<br>fmt.Println(p1.Puan) // Çıktı: 10 (Değişti)<br>
}