Menu
Coddy logo textTech

Pointer ve Değer Alıcılar

Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 8 / 107.

Metotlar değer alıcısına veya işaretçi alıcısına sahip olabilir. Değer alıcısı, yapının bir kopyası üzerinde çalışır. İşaretçi alıcısı, özgün yapı üzerinde çalışır ve alanlarını değiştirebilir.

Değer alıcısı: bir kopya üzerinde çalışır

type Counter struct {
    Count int
}

func (c Counter) GetCount() int {
    return c.Count
}

// Bu orijinali DEĞİŞTİRMEZ
func (c Counter) IncrementWrong() {
    c.Count++ // Sadece kopyayı değiştirir!
}

İşaretçi alıcısı: orijinali değiştirir

// Bu orijinali DEĞİŞTİRİR
func (c *Counter) Increment() {
    c.Count++
}

func (c *Counter) Reset() {
    c.Count = 0
}

İkisini birlikte kullanma

func main() {
    counter := Counter{Count: 0}

    counter.Increment()
    counter.Increment()
    fmt.Println(counter.GetCount()) // Çıktı: 2

    counter.Reset()
    fmt.Println(counter.GetCount()) // Çıktı: 0
}

Metot yalnızca verileri okuyorsa değer alıcısı kullanın. Metodun struct alanlarını değiştirmesi gerekiyorsa işaretçi alıcısı (*StructName) kullanın. Go, referanslamayı otomatik olarak yönetir. Her ikisini de aynı şekilde çağırırsınız.

challenge icon

Görev

Orta

Doğru alıcı türlerini kullanarak Wallet yapısına yöntemler ekleyin:

  • GetBalance: değer alıcısı, mevcut bakiyeyi döndürür
  • Deposit: işaretçi alıcısı, bakiyeye miktar ekler
  • Withdraw: işaretçi alıcısı, yalnızca yeterli bakiye varsa miktarı çıkarır

Kendin dene

package main

import "fmt"

func main() {
    var balance, deposit, withdraw float64
    fmt.Scan(&balance, &deposit, &withdraw)

    w := Wallet{Balance: balance}

    fmt.Printf("Balance: %.2f\n", w.GetBalance())

    w.Deposit(deposit)
    fmt.Printf("After deposit: %.2f\n", w.GetBalance())

    w.Withdraw(withdraw)
    fmt.Printf("After withdrawal: %.2f\n", w.GetBalance())

    fmt.Printf("Final balance: %.2f\n", w.GetBalance())
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Nesne Yönelimli Programlama bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi