В реальной жизни, скорее всего, задачу придёться решать немного иначе.
Обычно вам приходят данные в виде структур, например, когда вы извлекаете данные из базы.
В момент получения данных вам нужно просто заполнить слайс интерфейсов этими структурами (которые реализуют методы интерфейса)
Сделал пример того, как задача может быть решена
https://play.golang.org/p/RKrCLIqakXg
package main
import "fmt"
// объявляем интерфейс
type Profile interface {
GetFullName() string
}
// структура данных, которая будет реализовывать интерфейс Profile
type User struct {
Name string
LastName string
}
// реализация метода интерфейса Profile
func (u User) GetFullName() string {
return u.Name + ` ` + u.LastName
}
// пример функции, которая извлекает/формирует данные и возвращает слайс интерфейсов
func getProfiles() []Profile {
// создаём слайс интерфейсов
var result = make([]Profile, 10)
for i := 0; i<10; i++ {
// но заполняем слайс структурами, которые реализуют этот интерфейс
result[i] = User{
Name: fmt.Sprintf("Name%d", i),
LastName: fmt.Sprintf("LastName%d", i),
}
}
return result
}
// пример функции, которая работает со слайсом интерфейсов.
func printProfiles(profiles []Profile) {
for _, profile := range profiles {
fmt.Println(profile.GetFullName())
}
}
func main() {
printProfiles(getProfiles())
}