golang: slice of struct! = slice of interface it implementa?

Ho un Model interfaccia, che è implementato da struct Person .

Per ottenere un’istanza di modello, ho le seguenti funzioni di supporto:

 func newModel(c string) Model { switch c { case "person": return newPerson() } return nil } func newPerson() *Person { return &Person{} } 

L’approccio sopra riportato mi consente di restituire un’istanza Persona correttamente digitata (può facilmente aggiungere nuovi modelli successivamente con lo stesso approccio).

Quando ho tentato di fare qualcosa di simile per restituire una fetta di modelli, ricevo un errore. Codice:

 func newModels(c string) []Model { switch c { case "person": return newPersons() } return nil } func newPersons() *[]Person { var models []Person return &models } 

Vai lamenta: cannot use newPersons() (type []Person) as type []Model in return argument

Il mio objective è quello di restituire una porzione di qualsiasi tipo di modello richiesto (se []Person , []FutureModel , []Terminator2000 , w / e). Cosa mi manca e come posso implementare correttamente una soluzione del genere?