Gömülü Struct'lar
Coddy'nin GO Journey'sinin Temeller bölümünün bir parçası — ders 99 / 109.
Go, bir struct'ı diğerinin içine gömmenize izin vererek kompozisyon (composition) ilişkileri oluşturmanızı sağlar. Bu, Go'nun kalıtıma (inheritance) yaklaşımıdır.
Biri diğerine gömülü olacak şekilde iki struct tanımlayın:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // gömülü struct (alan adı yok)
}
func main() {
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
// Alanlara doğrudan erişin
fmt.Println(person.city) // Gömülü alana erişim
}
Çıktı, gömülü yapının (struct) alanlarına doğrudan erişebildiğimizi gösteriyor:
PortlandGörev
BaşlangıçBu meydan okumada, Go'da gömülü yapıları (kompozisyon) kullanma pratiği yapacaksınız.
İki yapımız var: Address ve Person. Bir kişinin adres alanlarına doğrudan erişebilmesi için Person yapısı Address yapısını gömmelidir.
Göreviniz, Address yapısını gömmek için Person yapı tanımını tamamlamak ve ardından adres alanlarına doğrudan kişi örneğinden erişmektir.
Kopya kağıdı
Go, kompozisyon (composition) için yapı (struct) gömmeyi kullanır. Bir yapıyı diğerinin içine, alan adı belirtmeden sadece yapı türünü ekleyerek gömebilirsiniz:
type Address struct {
city string
state string
}
type Person struct {
name string
age int
Address // gömülü yapı (alan adı yok)
}
Gömülü yapı alanlarına doğrudan erişin:
person := Person{
name: "Alice",
age: 30,
Address: Address{city: "Portland", state: "Oregon"},
}
fmt.Println(person.city) // Gömülü alana doğrudan eriş
Kendin dene
package main
import "fmt"
// Address struct'ı konum bilgilerini içerir
type Address struct {
Street string
City string
ZipCode string
}
// Person struct'ı Address struct'ını gömmelidir
type Person struct {
Name string
Age int
// TODO: Address struct'ını buraya gömün (sadece tek satır)
}
func main() {
// Adres bilgileriyle yeni bir kişi oluşturun
person := Person{
Name: "Alice",
Age: 30,
Address: Address{
Street: "123 Main St",
City: "Wonderland",
ZipCode: "12345",
},
}
// Adres dahil kişi bilgilerini yazdırın
fmt.Println("Name:", person.Name)
fmt.Println("Age:", person.Age)
// TODO: Adres alanlarını doğrudan person örneğinden yazdırın
// (person.Address.Street vb. kullanmadan)
fmt.Println("Street:", person.Street)
fmt.Println("City:", person.City)
fmt.Println("ZipCode:", person.ZipCode)
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Temeller bölümündeki tüm dersler
4Karşılaştırma ve Mantıksal Operatörler
Karşılaştırma Operatörleri - Bölüm 1Karşılaştırma Operatörleri - Bölüm 2Mantıksal VE OperatörüMantıksal VEYA OperatörüMantıksal DEĞİL OperatörüOperatör Önceliği TemelleriÖzet - Karşılaştırma Yapma7Kontrol Akışı: Döngüler
`for` Döngüsü Nedir?`for` Döngüsü - Temel`for` Döngüsü - Sadece Koşul`break` Anahtar Kelimesi`continue` Anahtar Kelimesiİç İçe DöngülerÖzet - İşlemleri Tekrarlama10Bileşik Tipler: Diziler
Dizilere GirişDizileri TanımlamaDizilere İlk Değer AtamaDizi Elemanlarına Erişme`len` ile Dizi UzunluğuDiziler Üzerinde YinelemeÇok Boyutlu Diziler13Bileşik Tipler: Struct'lar
Özel Tipler TanımlamaStruct Örnekleri OluşturmaStruct Alanlarına ErişmeStruct Pointer'larıStruct'ları BaşlatmaGömülü Struct'larAnonim Struct'larÖzet - Özel Veri Yapıları2Değişkenler ve Temel Veri Tipleri
Değişken nedir?`:=` ile Tür ÇıkarımıTam Sayılar (int)Ondalıklı SayılarBooleanlarStringlerSıfır DeğerlerSabitlerİsimlendirme KurallarıÖzet - Değişkenler ve Türler5Temel Giriş/Çıkış
Biçimlendirilmiş ÇıktıBiçim BelirteçleriVeri Tiplerini YazdırmaTemel Kullanıcı Girdisi AlmaÖzet - Giriş ve Çıkış8Fonksiyonlar
Fonksiyonları AnlamakFonksiyon TanımlamaFonksiyonları ÇağırmaFonksiyon ParametreleriTek Bir Değer DöndürmeBirden Fazla Değer Döndürmeİsimlendirilmiş Dönüş DeğerleriFonksiyon Kapsamı TemelleriÖzet - Yeniden Kullanılabilir Kod Oluşturma3Temel Operatörler
Aritmetik OperatörlerBölme OperatörüModulo OperatörüAtama OperatörüBileşik Atama OperatörleriArtırma ve AzaltmaÖzet - Hesaplamalar6Kontrol Akışı: Koşullu İfadeler
`if` İfadesi`else` Anahtar Kelimesi`else if` Anahtar Kelimesi`if` İçinde Değişken GölgelemeDeğişkenleri Başlatma`switch` İfadesiİfadeli `switch`İfadesiz `switch``fallthrough` Anahtar KelimesiÖzet - Karar Verme