GoDasturchi
Snap Together

Snap Together

Birlashtirib ulash

example.go
type Engine struct {
	Horsepower int
}

type Car struct {
	Brand string
	Engine        // embedded, maydon nomi yo'q!
}

c := Car{Brand: "Tesla", Engine: Engine{Horsepower: 670}}
fmt.Println(c.Horsepower) // 670, ko'tarilgan (promoted)!

Embedding — bitta structni ikkinchisining ichiga maydon nomi bermasdan joylashtiradi. Embed qilingan structning maydonlari ko'tariladi (promoted). Ularga to'g'ridan-to'g'ri tashqi struct orqali murojaat qilasiz. c.Engine.Horsepower o'rniga c.Horsepower.

Bu — Go'ning meros olish (inheritance)ga javobi: kompozitsiya. "Car Engine'*dir*" o'rniga, "Car Engine'ga *ega*". Structlarni qurilish bloklaridek birlashtirib ulaysiz. Embed qilingan maydonlar va metodlarning barchasi birga keladi.

Embed qilingan structga aniq murojaat ham qilishingiz mumkin. c.Engine.Horsepower ham ishlaydi. Ikkala yo'l ham bir xil ma'lumotga boradi. Agar tashqi structda bir xil nomli maydon bo'lsa, u embed qilinganini soyalaydi.

>_ Exercise

Street string, City string, Country string maydonlariga ega Address struct'ini aniqlang.

Addressni embed qiladigan va qo'shimcha Name string, Role string maydonlariga ega Employee struct'ini aniqlang.

To'liq to'ldirilgan Employee qaytaradigan NewEmployee(name, role, street, city, country string) Employee funksiyasini yozing.

"Street, City, Country" qaytaradigan (e Employee) FullAddress() string metodini yozing.

Misollar:

  • e := NewEmployee("Alice", "Engineer", "123 Main St", "Portland", "USA")
  • e.City "Portland" qaytaradi (Address'dan ko'tarilgan!)
  • e.FullAddress() "123 Main St, Portland, USA" qaytaradi

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Embedding sizga meros emas, kompozitsiya beradi. Maydonlar va metodlar ko'tariladi. Ularga to'g'ridan-to'g'ri tashqi struct orqali murojaat qiling.

NEXT UP

Project: Music Catalog (Types)

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Snap Together

Birlashtirib ulash

example.go
type Engine struct {
	Horsepower int
}

type Car struct {
	Brand string
	Engine        // embedded, maydon nomi yo'q!
}

c := Car{Brand: "Tesla", Engine: Engine{Horsepower: 670}}
fmt.Println(c.Horsepower) // 670, ko'tarilgan (promoted)!

Embedding — bitta structni ikkinchisining ichiga maydon nomi bermasdan joylashtiradi. Embed qilingan structning maydonlari ko'tariladi (promoted). Ularga to'g'ridan-to'g'ri tashqi struct orqali murojaat qilasiz. c.Engine.Horsepower o'rniga c.Horsepower.

Bu — Go'ning meros olish (inheritance)ga javobi: kompozitsiya. "Car Engine'*dir*" o'rniga, "Car Engine'ga *ega*". Structlarni qurilish bloklaridek birlashtirib ulaysiz. Embed qilingan maydonlar va metodlarning barchasi birga keladi.

Embed qilingan structga aniq murojaat ham qilishingiz mumkin. c.Engine.Horsepower ham ishlaydi. Ikkala yo'l ham bir xil ma'lumotga boradi. Agar tashqi structda bir xil nomli maydon bo'lsa, u embed qilinganini soyalaydi.

>_ Exercise

Street string, City string, Country string maydonlariga ega Address struct'ini aniqlang.

Addressni embed qiladigan va qo'shimcha Name string, Role string maydonlariga ega Employee struct'ini aniqlang.

To'liq to'ldirilgan Employee qaytaradigan NewEmployee(name, role, street, city, country string) Employee funksiyasini yozing.

"Street, City, Country" qaytaradigan (e Employee) FullAddress() string metodini yozing.

Misollar:

  • e := NewEmployee("Alice", "Engineer", "123 Main St", "Portland", "USA")
  • e.City "Portland" qaytaradi (Address'dan ko'tarilgan!)
  • e.FullAddress() "123 Main St, Portland, USA" qaytaradi

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

Embedding sizga meros emas, kompozitsiya beradi. Maydonlar va metodlar ko'tariladi. Ularga to'g'ridan-to'g'ri tashqi struct orqali murojaat qiling.

NEXT UP

Project: Music Catalog (Types)