Embedded structs promote fields and methods while keeping the composed pieces visible.

embedding Embed a small struct when a larger model should reuse its fields and methods directly.

Embedding Methods

elevated
embedding_methods.go
Replay: real traced execution (multi-file project)
package main

import "fmt"

type User struct {
	Name string
}

func (u User) Label() string {
	return u.Name
}

type Admin struct {
	User
	Level int
}

func main() {
	var elevated = false
	admin := Admin{User: User{Name: "Ada"}, Level: 1}
	if elevated {
		admin.Level = 3
	}

	label := admin.Label()
	canDeploy := admin.Level >= 3

	fmt.Println("label=", label)
	fmt.Println("level=", admin.Level)
	fmt.Println("can_deploy=", canDeploy)
}
package main

import "fmt"

type User struct {
	Name string
}

func (u User) Label() string {
	return u.Name
}

type Admin struct {
	User
	Level int
}

func main() {
	var elevated = true
	admin := Admin{User: User{Name: "Ada"}, Level: 1}
	if elevated {
		admin.Level = 3
	}

	label := admin.Label()
	canDeploy := admin.Level >= 3

	fmt.Println("label=", label)
	fmt.Println("level=", admin.Level)
	fmt.Println("can_deploy=", canDeploy)
}
  1. elevated ← false, admin ← main.Admin{User:main.User{Name:"Ada"}, Level:1}

    18func main() {19  var elevated→ false = false //@elevated=true20  admin→ main.Admin{User:main.User{Name:"Ada"}, Level:1} := Admin{User: User{Name: "Ada"}, Level: 1}21  if elevated {22    admin.Level = 323  }2425  label := adminmain.Admin{User:main.User{Name:"Ada"}, Level:1}.Label()26  canDeploy := admin.Level >= 3
  2. func (u User) Label() string

    9func (u User) Label() string {10  return u.Name"Ada"11}
  3. label ← "Ada", canDeploy ← false

    25  label→ "Ada" := adminmain.Admin{User:main.User{Name:"Ada"}, Level:1}.Label()26  canDeploy→ false := admin.Level1 >= 32728  fmt.Println("label=", label"Ada")29  fmt.Println("level=", admin.Level1)30  fmt.Println("can_deploy=", canDeployfalse)31}
    outputlabel= Ada
    level= 1
    can_deploy= false
  1. elevated ← true, admin ← main.Admin{User:main.User{Name:"Ada"}, Level:1}

    18func main() {19  var elevated→ true = true20  admin→ main.Admin{User:main.User{Name:"Ada"}, Level:1} := Admin{User: User{Name: "Ada"}, Level: 1}21  if elevated {
  2. admin.Level ← 3

    20admin := Admin{User: User{Name: "Ada"}, Level: 1}21if elevatedtrue {22  admin.Level→ 3 = 323}
  3. label := admin.Label()

    25label := adminmain.Admin{User:main.User{Name:"Ada"}, Level:3}.Label()26canDeploy := admin.Level >= 3
  4. func (u User) Label() string

    9func (u User) Label() string {10  return u.Name"Ada"11}
  5. label ← "Ada", canDeploy ← true

    25  label→ "Ada" := adminmain.Admin{User:main.User{Name:"Ada"}, Level:3}.Label()26  canDeploy→ true := admin.Level3 >= 32728  fmt.Println("label=", label"Ada")29  fmt.Println("level=", admin.Level3)30  fmt.Println("can_deploy=", canDeploytrue)31}
    outputlabel= Ada
    level= 3
    can_deploy= true