new fonksiyonu
- Go kursu
- Başlangıç
- Ders 65/90
- 4 dk
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) // 42Struct'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) // 11Yapı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
package main
import "fmt"
func main() {
// buraya yaz
}Örnek çözüm
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
p := ____(float64)
*p = 3.5
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 |