Go allows you to take existing types and both extend and change their behavior.
    This is accomplished through type embedding.

    The type that is embedded is called an inner type of the new outer type.

    Through inner type promotion, identifiers from the inner type are promoted up to the outer type.
    The outer type can also declare the same identifiers as the inner type and override any fields or methods it needs to.

    Something special about an inner type is that it always exists in and of itself, and can always be accessed directly.