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
}