- first-class functions,
- lexical scope,
- a system call interface,
- and immutable strings in which text is generally encoded in UTF-8.
But it has comparatively few features and is unlikely to add more. For instance, it has:
- no implicit numeric conversions,
- no constructors or destructors,
- no operator overloading,
- no default parameter values,
- no inheritance,
- no generics,
- no exceptions,
- no macros,
- no function annotations,
- and no thread-local storage.
To avoid design complexity
Go has no class hierarchies, or indeed any classes; complex object behaviors are created:
Methods may be associated with any user-defined type, not just structures, and the relationship between:
- concrete types
- and abstract types (interfaces) is implicit,
so a concrete type may satisfy an interface that the type’s designer was unaware of.