irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Fotokopi mi, Orijinal mi?
Go varsayılan olarak "Değer ile Aktaran" (Pass by Value) bir dildir. Yani bir fonksiyona bir değişken gönderdiğinizde, Go o değişkenin bir kopyasını (fotokopisini) oluşturur. Fonksiyon içinde kopyayı değiştirirseniz, orijinal veri değişmez.Orijinal veriyi değiştirmek veya büyük verileri kopyalayarak RAM'i şişirmemek için Pointer (İşaretçi) kullanırız. Pointer, verinin kendisini değil, verinin RAM'deki adresini tutan bir değişkendir.
İki Sihirli Operatör:
- & (Adres Operatörü): Bir değişkenin RAM'deki adresini bulur.
- * (İşaretçi Operatörü): Adresi bilinen bir değişkenin içindeki değeri okur veya değiştirir (Dereferencing).
Kod:
package main
import "fmt"
func main() {sayi := 10
// "sayi" değişkeninin adresini "p" değişkenine ata<br>var p *int = &sayi <br><br>fmt.Println("Değer:", sayi) // Çıktı: 10<br>fmt.Println("Adres:", p) // Çıktı: 0xc00001... (Hexadecimal adres)<br><br>// Adresteki değeri okuma<br>fmt.Println("Pointer üzerinden değer:", *p) // Çıktı: 10<br><br>// Adresteki değeri değiştirme<br>*p = 20<br>fmt.Println("Yeni Değer:", sayi) // Çıktı: 20 (Orijinal değişti!)<br>
}
Fonksiyonlarda Kullanımı
Aşağıdaki örnekte degistir fonksiyonu orijinali etkilemezken, degistirPointer orijinali etkiler.
Kod:
func degistir(val int) {val = 0 // Sadece kopyayı sıfırlar}
func degistirPointer(val *int) {*val = 0 // Orijinal adrese gidip değeri sıfırlar}
func main() {x := 50degistir(x)fmt.Println(x) // 50 (Değişmedi)
degistirPointer(&x) // Adres gönderiyoruz<br>fmt.Println(x) // 0 (Değişti)<br>
}