Anonim Yapılar ve Birleştirme
Gömme ve yapı tabanlı kod yeniden kullanı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
Dogbeklenen yerdeAnimalaktaramazsı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.
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
- Yapı Tanımlama ve Kullanma
- Yapılar Üzerinde Yöntemler
- Yapıcı Örüntüleri
- Anonim Yapılar ve Birleştirme