Go is a statically typed language. In most cases the type of a variable is known at compilation time.

One exception is interface type, especially empty interface interface{}.

Empty interface is a dynamic type, similar to Object in Java or C#.

At compilation time we can’t tell if the underlying value of interface type is an int or a string.

Package [reflect](<https://golang.org/pkg/reflect/>) in standard library allows us to work with such dynamic values at runtime. We can:

Related language-level functionality for inspecting type of an interface value at runtime is a type switch and a type assertion.


Basics of reflections are:

Reflection has several practical uses.

Primitive types