slice struct != Scheibe der Schnittstelle implementiert?

Habe ich eine Schnittstelle Model implementiert durch struct Person.

Um ein Modell-Beispiel habe ich die folgenden Hilfsfunktionen:

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

func newPerson() *Person {
    return &Person{}
}

Dem obigen Ansatz ermöglicht es mir, um wieder eine richtig getippte Person-Instanz (kann leicht hinzufügen neuer Modelle später mit dem gleichen Ansatz).

Wenn ich versuchte, etwas ähnliches zu tun für die Rücksendung eine Scheibe von Modellen, bekomme ich eine Fehlermeldung. Code:

func newModels(c string) []Model {
    switch c {
    case "person":
        return newPersons()
    }
    return nil
}

func newPersons() *[]Person {
    var models []Person
    return &models
}

Gehen, beschwert sich mit: cannot use newPersons() (type []Person) as type []Model in return argument

Mein Ziel ist die Rückgabe einer Scheibe was auch immer das Modell, der Typ wird verlangt (ob []Person, []FutureModel, []Terminator2000, w/e). Was bin ich, und wie kann ich richtig die Implementierung einer solchen Lösung?

  • Ein Segment unterscheidet sich von einem array in Gehen. Da waren Sie wirklich sprechen, Scheiben, habe ich Ihren Beitrag bearbeitet um dies zu reflektieren.
  • Stephen, vielen Dank, geschätzt 🙂
  • Haben Sie jemals herausfinden? Ich bin versucht, das gleiche zu tun, so dass ich nicht wiederholen Sie eine Tonne von code für meine /api/{collection}. Ich habe es funktioniert für alles, außer für die index-Funktion, die Lesen muss in eine Scheibe.
  • Ich kann mich nicht erinnern, was ich am Ende tun hier, und ich habe nicht gespielt w/ Gehen in eine Weile. Sorry, ich kann nicht mehr Hilfe.
  • Kontravarianz (oder ist das Kovarianz -?) schlägt wieder zu!
InformationsquelleAutor Jon L. | 2012-10-21
Schreibe einen Kommentar