Go Academy · Ders

Anonim Yapılar ve Birleştirme

Gömme ve yapı tabanlı kod yeniden kullanımı

4. ders / 413 adım

Anonim Yapılar ve Birleştirme, 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.

Anonim Yapılar

Anonim yapı, adlandırılmış bir türü olmayan yapıdır. Satır içinde tanımlanır ve kısa ömürlü veriler, tablo tabanlı sınamalar ve tek seferlik gruplamalar için kullanışlıdır:

package main
import "fmt"

func main() {
    point := struct{ X, Y int }{X: 3, Y: 7}
    fmt.Println(point.X, point.Y)
}

Tablo Sınamalarında Anonim Yapılar

Yaygın bir Go kullanım biçiminde, tablo tabanlı sınamalar için anonim yapılardan oluşan bir dilim kullanılır:

package main
import "fmt"

func double(n int) int { return n * 2 }

func main() {
    tests := []struct{ input, want int }{
        {1, 2}, {5, 10}, {0, 0},
    }
    for _, tt := range tests {
        got := double(tt.input)
        if got != tt.want {
            fmt.Printf("FAIL: double(%d) = %d, want %d\n", tt.input, got, tt.want)
        }
    }
    fmt.Println("all tests passed")
}

Yapı Gömme

Bir türü yapının içine gömmek, o türün alanlarını ve yöntemlerini dış yapıya taşır:

package main
import "fmt"

type Animal struct{ Name string }
func (a Animal) Speak() string { return a.Name + " speaks" }

type Dog struct {
    Animal        // embedded
    Breed string
}

func main() {
    d := Dog{Animal: Animal{"Rex"}, Breed: "Labrador"}
    fmt.Println(d.Name)    // promoted field
    fmt.Println(d.Speak()) // promoted method
}

Birden Çok Tür Gömme

Bir yapı birden çok türü gömebilir. Çakışmalar (aynı alan veya yöntem adı) açıkça çözülmelidir:

package main
import "fmt"

type Logger struct{}
func (Logger) Log(s string) { fmt.Println("[LOG]", s) }

type Metrics struct{}
func (Metrics) Count() int { return 42 }

type Service struct {
    Logger
    Metrics
    Name string
}

func main() {
    svc := Service{Name: "auth"}
    svc.Log("started")       // from Logger
    fmt.Println(svc.Count()) // from Metrics
}

Gömme ve Kalıtım Karşılaştırması

Go'da sınıf kalıtımı yoktur. Gömme, bileşimdir:

  • Gömme, alanları ve yöntemleri dış yapıya taşır; ancak dış tür bir alt tür değildir
  • Bir Dog beklenen yerde Animal aktaramazsınız
  • Çok biçimlilik için arayüzleri, kodu yeniden kullanmak için gömmeyi kullanınız

Taşınan Yöntemleri Geçersiz Kılma

Dış yapı, kendi yöntemini tanımlayarak gömülü bir yöntemi gölgeleyebilir:

package main
import "fmt"

type Base struct{}
func (Base) Hello() string { return "Base hello" }

type Child struct{ Base }
func (Child) Hello() string { return "Child hello" } // shadows Base.Hello

func main() {
    c := Child{}
    fmt.Println(c.Hello())      // Child hello
    fmt.Println(c.Base.Hello()) // Base hello (explicit)
}

Yapılandırma İçin Anonim Yapı

Adlandırılmış bir tür tanımlamadan ilişkili yapılandırmaları gruplamak için anonim yapı kullanınız:

package main
import "fmt"

func main() {
    cfg := struct {
        Host string
        Port int
        TLS  bool
    }{
        Host: "api.example.com",
        Port: 443,
        TLS:  true,
    }
    fmt.Println(cfg)
}

Arayüz Gömme

Bir arayüzü yapıya gömmek, taklit nesneleri oluşturmak ve varsayılan uygulamalar sağlamak için kullanışlıdır:

package main
import "fmt"

type Reader interface{ Read() string }

type Mock struct{ Reader }  // embed interface

func main() {
    m := Mock{}
    fmt.Printf("%T\n", m.Reader) // <nil> — not set
    // Assign a real impl at test time:
    _ = m
}

Yapı Bileşiminin Tuzakları

Şu durumlara dikkat ediniz:

  • İki gömülü tür aynı alan veya yöntem adına sahip olduğunda belirsiz seçiciler oluşması
  • Üzerinde yöntem çağırdığınızda boş gömülü işaretçinin paniğe neden olması
  • Gömmenin kalıtım olmadığını unutmak; dış türü gömülü tür yerine kullanamazsınız

Anonim Yapıları Karşılaştırma

Aynı alan adlarına ve türlerine sahip iki anonim yapı, etiketleri de eşleşiyorsa birbirlerine atanabilir:

package main
import "fmt"

func main() {
    a := struct{ X, Y int }{1, 2}
    b := struct{ X, Y int }{1, 2}
    fmt.Println(a == b) // true
}

Kısa Kontrol

Bir türü yapıya gömmek ne sağlar?

Özet: Bileşim

Temel çıkarımlar:

  • Anonim yapılar, tablo tabanlı sınamalar ve kısa ömürlü veriler için çok uygundur
  • Gömme, alanları ve yöntemleri dış yapıya taşır; bu kalıtım değil bileşimdir
  • Dış türler, gömülü yöntemleri gölgeleyebilir
  • Belirsiz seçicileri açıkça çözünüz
  • Çok biçimlilik için arayüzleri kullanınız

Alıştırma Görevi

TimestampedRecord yapısını, bir Timestamp struct{ CreatedAt, UpdatedAt string } ve bir Data struct{ Key, Value string } gömecek şekilde oluşturunuz. Bir örneğini oluşturunuz ve taşınan tüm alanları yazdırınız.

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

“Anonim Yapılar ve Birleştirme” dersi ücretsiz mi?

Evet — “Anonim Yapılar ve Birleştirme” 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.

“Anonim Yapılar ve Birleştirme” dersinde ne öğreneceğim?

Gömme ve yapı tabanlı kod yeniden kullanımı 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.

“Anonim Yapılar ve Birleştirme” 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. Yapı Tanımlama ve Kullanma
  2. Yapılar Üzerinde Yöntemler
  3. Yapıcı Örüntüleri
  4. Anonim Yapılar ve Birleştirme
← Go Academy Sayfasına Dön