Почему type []User нельзя использовать как type []UserInterface?
Это сделано намеренно, дабы избежать неявных дорогих преобразований.
Первое, что нужно знать — это отличия «структуры» от «интерфейса» в Go. Это просто, и этого достаточно, чтобы понять, почему вы просто так не можете «скастить» слайс структур в слайс интерфейсов.
...
Второе — и созвучное с выше обсужденными слайсами — это то, операция конвертирования слайсов — дорогая операция. По времени это O(n) и компилятор Go подобные дорогие вещи не будет делать, чтобы не давать нерадивым программистам писать медленный код. Хотите делать потенциально дорогую операцию — будьте добры, сделайте это явно, вся ответственность на вас, а не на компиляторе.
Детальнее:Холиворная статья: причина №4Объяснение на SO
к.о. потому что это разные типы )
play.golang.org/p/Wtat6zWKRC