After have followed an amazing course about golang one years ago, I had need to refresh my mind about the Struct in golang, and for do it I had used some superheroes:

First Example:

package main

import "fmt"

type skill struct {
	Power string
}

type hero struct {
	Name  string
	Alias string
	skill
}

func main() {
	h1 := hero{
		Name:  "Bruce Wayne",
		Alias: "Batman",
		skill: skill{
			Power: "a lot of gadgets",
		},
	}
	h2 := hero{
		Name:  "Tony Stark",
		Alias: "Iron",
		skill: skill{
			Power: "hi-tech armor",
		},
	}

	fmt.Printf("the best skill of %s is %s \n", h1.Alias, h1.skill.Power)
	fmt.Printf("the best skill of %s is %s \n", h2.Alias, h2.skill.Power)

	s1 := skill{
		Power: "velocity",
	}

	h3 := hero{
		Name:  "Barry Allen",
		Alias: "Flash",
		skill: skill{
			Power: s1.Power,
		},
	}

	fmt.Printf("the best skill of %s is %s \n", h3.Alias, h3.skill.Power)
}

Second Example

package main

import "fmt"

type skill struct {
	Power string
}

type hero struct {
	Name  string
	Alias string
}

type heroSkill struct {
	hero
	skill
}

func main() {
	hs1 := heroSkill{
		hero: hero{
			Name:  "Clark Kent / Kal-El",
			Alias: "Superman",
		},
		skill: skill{
			Power: "a lot of cool superpowers",
		},
	}

	hs2 := heroSkill{
		hero: hero{
			Name:  "Steve Rogers",
			Alias: "Capitan America",
		},
		skill: skill{
			Power: "strong",
		},
	}

	fmt.Printf("the best skill of %s is %s \n", hs1.hero.Alias, hs1.skill.Power)
	// check the different way to call the struct, in this second Print, there no need to call the sub struct.
	fmt.Printf("the best skill of %s is %s \n", hs2.Alias, hs2.Power)
}