Go Academy · Ders

new() ve İşaretçilerin Kullanılacağı Durumlar

new ile ayırma ve yaygın işaretçi örüntüleri

4. ders / 413 adım

new() ve İşaretçilerin Kullanılacağı Durumlar, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

new Yerleşik İşlevi

new(T), sıfırlanmış bir T ayırır ve *T döndürür. Yapılar için &T{} ile eşdeğerdir:

package main
import "fmt"

func main() {
    p := new(int)
    fmt.Println(*p)     // 0
    *p = 42
    fmt.Println(*p)     // 42

    type Point struct{ X, Y int }
    pt := new(Point)
    fmt.Println(*pt)    // {0 0}
}

new ile &T{} Karşılaştırması

Yapılar için &T{} daha deyimseldir ve alanların başlatılmasına olanak tanır. new, modern Go'da nadiren kullanılır:

package main
import "fmt"

type Config struct{ Port int; Host string }

func main() {
    a := new(Config)          // zeroed
    b := &Config{Port: 8080}  // initialized
    fmt.Println(a, b)
}

Ne Zaman İşaretçi Döndürülmeli

Şu durumlarda bir oluşturucudan işaretçi döndürün:

  • Yapı durum taşıyorsa ve çağıranların aynı örneği paylaşması gerekiyorsa
  • Yapının işaretçi alıcısı yöntemleri varsa (arayüz uyumluluğu için gerekiyorsa)
  • Yapı büyükse ve kopyalamalar maliyetliyse

Ne Zaman Değer Döndürülmeli

Şu durumlarda değer döndürün:

  • Tür küçükse (birkaç alanı varsa)
  • Değişmez bir yapılandırmaysa
  • Çağıranların birbirinden bağımsız kopyalar aldığını açıkça belirtmek istiyorsanız

Örnek: time.Time, birçok yönteme sahip olmasına rağmen değer olarak döndürülür.

Dilimlerde ve Eşlemelerde İşaretçiler

Koleksiyonlarda işaretçi saklamak, değişikliklerin paylaşılmasını sağlar:

package main
import "fmt"

type User struct{ Name string; Score int }

func main() {
    users := []*User{{"Alice", 0}, {"Bob", 0}}
    users[0].Score = 100
    fmt.Println(users[0]) // &{Alice 100}
}

İsteğe Bağlılık için İlkel Türe İşaretçi

Bir *int veya *string alanı, "ayarlanmadı" anlamında nil olabilir; bu, omitempty kullanılan JSON veya isteğe bağlı veritabanı sütunları için yararlıdır:

package main
import "fmt"

type Profile struct {
    Name string
    Age  *int // nil means not provided
}

func main() {
    p := Profile{Name: "Alice"}
    fmt.Println(p.Age == nil) // true
    age := 30
    p.Age = &age
    fmt.Println(*p.Age) // 30
}

İşaretçi Çoğalmasından Kaçınma

Aşırı işaretçi kullanımı çöp toplayıcı üzerindeki yükü artırır ve önbellek yerelliğini azaltır. Değer türlerini yalnızca başarım amacıyla işaretçilere dönüştürmeden önce karşılaştırmalı ölçüm yapın.

make ile new Karşılaştırması

make, dilimleri, eşlemeleri ve kanalları başlatır (bunlar dahili kurulum gerektirir). new, herhangi bir türü sıfır değerleriyle ayırır ve bir işaretçi döndürür. Farklı amaçlara hizmet ederler:

package main
import "fmt"

func main() {
    s := make([]int, 5)           // usable slice
    m := make(map[string]int)     // usable map
    p := new(int)                 // *int pointing to 0
    fmt.Println(s, m, *p)
}

Değişmez İşaretçi Örüntüsü

*T döndürün, ancak bunu değişmez olarak belgeleyin; kullananlar onu değiştirmemelidir. Bu, eşzamanlı çalışan görevler arasında paylaşılan yapılandırma nesnelerinde yaygındır.

İşaretçi Güvenliği Özeti

İşaretçilerle güvenli çalışmak için kurallar:

  • Başvurmadan önce her zaman nil denetimi yapın
  • Yığın değişkenlerine, değişkenin yaşam süresinden daha uzun süre işaretçi saklamayın (Go'nun kaçış analizi bunu yönetir)
  • Kesinlikle gerekli olmadıkça unsafe.Pointer dönüşümü yapmayın
  • Yığın ile öbek arasındaki yönetimi derleyiciye bırakın

Kısa Denetim

new(int) ne döndürür?

Özet: new ve İşaretçiler

Önemli çıkarımlar:

  • new(T), sıfırlanmış bir *T döndürür — nadiren kullanılır; &T{} ifadesini tercih edin
  • Küçük veya değişmez değerleri, durum taşıyan veya büyük yapılar için işaretçileri döndürün
  • *T alanları, nil'in yokluğu belirttiği anlamı sağlar
  • İşaretçileri aşırı kullanmayın — çöp toplamanın bir maliyeti vardır

Alıştırma İstemi

MaxConnections için *int alanına sahip bir Settings yapısı oluşturun. *Settings kabul eden ve yalnızca alan nil olduğunda varsayılan bir değer atayan bir işlev yazın.

Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“new() ve İşaretçilerin Kullanılacağı Durumlar” dersi ücretsiz mi?

Evet — “new() ve İşaretçilerin Kullanılacağı Durumlar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“new() ve İşaretçilerin Kullanılacağı Durumlar” dersinde ne öğreneceğim?

new ile ayırma ve yaygın işaretçi örüntüleri Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“new() ve İşaretçilerin Kullanılacağı Durumlar” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşaretçiler Nedir?
  2. İşaretçiler ve İşlevler
  3. Yöntemlerde İşaretçi Alıcıları
  4. new() ve İşaretçilerin Kullanılacağı Durumlar
← Go Academy Sayfasına Dön