CodeBlanks Logo Icon CodeBlanks

new fonksiyonu

new ile pointer döndüren bellek ayırmayı öğrenirsin.

new fonksiyonu

new(T), T türünden sıfır değerli yeni bir değer ayırır ve onun adresini (*T) döndürür:

p := new(int)     // *int, *p == 0
*p = 42
fmt.Println(*p)   // 42

Struct'larda genellikle &Tur{...} yazımı tercih edilir; çünkü alanlar aynı satırda doldurulabilir: u := &Urun{Ad: "Kalem"}.

Yapıcı fonksiyon

Go'da sınıf yapıcısı yoktur; bunun yerine New ile başlayan ve işaretçi döndüren fonksiyonlar yazılır:

type Sayac struct{ n int }

func NewSayac(baslangic int) *Sayac {
    return &Sayac{n: baslangic}
}

s := NewSayac(10)
s.n++
fmt.Println(s.n)  // 11

Yapıcı, geçerli başlangıç değerlerini tek yerde garanti eder.

Uygulama Yapıcı yaz

type Sayac struct{ n int } ve NewSayac(baslangic int) *Sayac yapıcısını yaz. s := NewSayac(10) ile oluştur, s.n += 5 yap ve s.n'yi yazdır.

Başlangıç kodu

main.go
package main

import "fmt"

func main() {
    // buraya yaz
}

Örnek çözüm

main.go
package main

import "fmt"

type Sayac struct{ n int }

func NewSayac(baslangic int) *Sayac {
    return &Sayac{n: baslangic}
}

func main() {
    s := NewSayac(10)
    s.n += 5
    fmt.Println(s.n)
}

Beklenen çıktı

15

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir fonksiyonun yerel değişkeninin adresini döndürmesi Go'da güvenli midir?

  • Hayır, geçersiz bellek olur
  • Yalnızca new ile
  • Derlenmez
  • Evet; derleyici değeri heap'e taşır Doğru cevap

Açıklama: Kaçış analizi adresin fonksiyon dışına çıktığını görür ve değişkeni heap'te ayırır; C'deki gibi bozuk işaretçi oluşmaz.

2 Yeni değer ayır

Soru
p := ____(float64)
*p = 3.5
Cevap
p := new(float64)
*p = 3.5

Açıklama: new(T) sıfır değerli bir T ayırıp adresini döndürür.

3 İfade ve tür

Kavram Anlamı
new(int) *int (değer 0)
&Urun{} *Urun
make([]int, 3) []int (işaretçi değil)
NewSayac(10) *Sayac

Başlangıç bölümündeki tüm dersler