• Declaring new user-defined types
    • Adding behavior to types with methods
    • Knowing when to use pointers and values
    • Implementing polymorphism with interfaces
    • Extending and changing types through composition
    • Exporting and unexporting identifiers

    Go is a statically typed programming language.

    A value’s type provides the compiler with two pieces of information:

    • first, how much memory to allocate—the size of the value
    • and second, what that memory represents.

    Some types get their representation based on the architecture of the machine. (such as int)