Menu
Coddy logo textTech

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:

Portland
challenge icon

Gö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)
}
quiz iconKendini test et

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