Struct Embedding
Go mein class inheritance nahi hai. Iske bajaye, aap ek struct ko doosre ke andar embed karte hain uska type bina kisi field name ke list kar ke — outer type ko khud ba khud embedded type ke fields aur methods tak direct access mil jaata hai, ek pattern jise promotion kaha jaata hai.
package main
import "fmt"
type Animal struct {
Name string
}
func (a Animal) Describe() string {
return a.Name + " is an animal"
}
type Dog struct {
Animal
Breed string
}
func main() {
d := Dog{Animal: Animal{Name: "Rex"}, Breed: "Labrador"}
fmt.Println(d.Name)
fmt.Println(d.Describe())
}Rex Rex is an animal
Ek promoted method ko override karna
Upar d.Name aur d.Describe() embedded Animal se seedhe promote hote hain, bina kisi extra code ki zaroorat ke. Ek type apna khud ka method bhi same naam se define kar sakta hai taake woh embedded wale se precedence le le, phir bhi explicitly usko call karte hue, jaise neeche Derived.Label karta hai.
package main
import "fmt"
type Base struct {
ID int
}
func (b Base) Label() string {
return fmt.Sprintf("Base#%d", b.ID)
}
type Derived struct {
Base
Name string
}
func (d Derived) Label() string {
return fmt.Sprintf("%s (%s)", d.Base.Label(), d.Name)
}
func main() {
d := Derived{Base: Base{ID: 7}, Name: "widget"}
fmt.Println(d.Label())
}Base#7 (widget)
Aage: standard library — kuch aam istemal hone wale packages, aur ek closing look ke Go ki standard library aur kya provide karti hai.
Practice exercise
Ek struct Vehicle define karein jiska field Wheels int ho. Ek struct Car define karein jo Vehicle ko embed kare aur ek field Brand string add kare. Wheels 4 aur Brand "Toyota" wali ek Car banayein, phir car.Wheels aur car.Brand print karein.