`interface{}` carries type information attached to the data with it and does runtime type validation, unfortunately I haven’t delved deep into it. But there are detailed discussions about this article over here: https://news.ycombinator.com/item?id=30045015
Talking about things such as memory alignment, cache locality, dynamic dispatch, Box heap allocation, compiler optimizations when type is known etc