Structs and Interfaces
Go Struct Embedding and Composition
Go has no inheritance. Reuse fields and methods by embedding one struct in another.
What you'll learn
- Embedding a struct
- Promoted fields and methods
- Composition
type Dog struct
DogAnimalName, Describe()Breed
Build types from smaller types
Go has no inheritance. Instead, a struct can embed another struct, and the fields and methods of the embedded type become available on the outer one. This is called composition.
Dog embeds Animal, so dog.Name and dog.Describe() work as if they were declared on Dog. The embedded value can still be reached by its type name, as in dog.Animal.Name. Service gets a Log method by embedding Logger.
Key points
- Dog embeds Animal and gets Name and Describe.
- The embedded value is still reachable:
dog.Animal. - Embedding is composition, not inheritance.
Runnable Go example
main.go
package main
import "fmt"
type Animal struct {
Name string
}
func (a Animal) Describe() string {
return a.Name + " is an animal"
}
type Dog struct {
Animal // embedded: Dog gets Name and Describe
Breed string
}
func (d Dog) Speak() string {
return d.Name + " says woof"
}
type Logger struct{ Prefix string }
func (l Logger) Log(message string) { fmt.Println(l.Prefix + message) }
type Service struct {
Logger
Name string
}
func main() {
dog := Dog{Animal: Animal{Name: "Rex"}, Breed: "Collie"}
fmt.Println(dog.Describe())
fmt.Println(dog.Speak())
fmt.Println(dog.Animal.Name, dog.Breed)
service := Service{Logger: Logger{Prefix: "[api] "}, Name: "users"}
service.Log("started " + service.Name)
}
Rex is an animal
Rex says woof
Rex Collie
[api] started usersPractice
Open the example in the online compiler, change a value or add a line, and predict the output before you run it. Then break the code on purpose and read the compiler's message.
Finished this lesson?
Mark it as learned to track your progress.
Your progress is saved in this browser Sign in to keep it on every device.
Practice with a challenge
Use what this lesson covers to solve a real problem. Each challenge runs in your browser with instant tests and an AI review.
- Price Decorators Wrap a base price in discount, tax, shipping and coupon decorators applied in order. Easy
- Composite Folder Sizes Compute the total size of every folder in a tree where folders contain files and other folders. Medium