Kodkitabi

Struct (Yapı) ve Pointer'lar

Özel veri tipleri (Struct) tanımlama ve bellek adreslerine erişim (Pointer).

Go'da class veya inheritance (kalıtım) yoktur. Nesne yönelimli programlama, verileri gruplamak için Struct'lar ve davranış eklemek için Metotlar kullanılarak yapılır.

Go'da değişkenler kopyalanarak fonksiyona aktarılır (Pass by Value). Orijinal veriyi değiştirmek için bellek adresini işaret eden Pointer (& ve *) kullanmak zorunludur.

Struct ve Pointer Kullanımı
package main
import "fmt"

// Sınıf niyetine kullanılan Struct tanımı
type User struct {
    ID    int
    Name  string
    Email string
}

// Pass by Value (Sadece kopyayı değiştirir)
func updateNameKopya(u User, newName string) {
    u.Name = newName
}

// Pass by Reference (Pointer ile bellekteki orijinali değiştirir)
func updateNameGercek(u *User, newName string) {
    u.Name = newName
}

func main() {
    // Nesne oluşturma
    user1 := User{ID: 1, Name: "Zafer", Email: "zafer@mail.com"}

    updateNameKopya(user1, "Ahmet")
    fmt.Println("Kopya güncellendi:", user1.Name) // Hala "Zafer"

    // Adresi (&) fonksiyona gönderiyoruz
    updateNameGercek(&user1, "Ahmet")
    fmt.Println("Pointer ile güncellendi:", user1.Name) // "Ahmet" oldu
}