title: slice of struct != slice of interface it implements?
body: <p>I have an interface <code>Model</code>, which is implemented by struct <code>Person</code>.</p>
  
  <p>To get a model instance, I have the following helper functions:</p>
  
  <pre><code>func newModel(c string) Model {
      switch c {
      case "person":
          return newPerson()
      }
      return nil
  }
  
  func newPerson() *Person {
      return &amp;Person{}
  }
  </code></pre>
  
  <p>The above approach allows me to return a properly typed Person instance (can easily add new models later with same approach).</p>
  
  <p>When I attempted to do something similar for returning a slice of models, I get an error. Code:</p>
  
  <pre><code>func newModels(c string) []Model {
      switch c {
      case "person":
          return newPersons()
      }
      return nil
  }
  
  func newPersons() *[]Person {
      var models []Person
      return &amp;models
  }
  </code></pre>
  
  <p>Go complains with: <code>cannot use newPersons() (type []Person) as type []Model in return argument</code></p>
  
  <p>My goal is to return a slice of whatever model type is requested (whether <code>[]Person</code>, <code>[]FutureModel</code>, <code>[]Terminator2000</code>, w/e). What am I missing, and how can I properly implement such a solution?</p>