Golang-Funktion zum zurückgeben einer Schnittstelle

Den code unten ist wirklich selbsterklärend.

Kommen, wie kann ich sagen, dass das Ergebnis CreateLion () ein Zeiger auf eine struct, die die Cat-Schnittstelle ist ein Beispiel für die Cat-Schnittstelle, und doch kann ich nicht sagen, dass CreateLion() ist vom Typ "Funktion, gibt die Cat-Schnittstelle."

Was ist die standard-Golang Ansatz zum erreichen dieser Art von Verhalten?

package main

import "fmt"

func main() {
    var lion Cat := CreateLion()
    lion.Meow()

    //this line breaks. Why?
    var cf CatFactory = CreateLion
}

type Cat interface {
    Meow()
}

type Lion struct {}
func (l Lion) Meow() {
    fmt.Println("Roar")
}

//define a functor that returns a Cat interface
type CatFactory func() Cat

//define a function that returns a pointer to a Lion struct
func CreateLion() *Lion {
    return &Lion{}
}
Gehen ist nicht Java. Gehen Sie keine erbschaft und keine "ist ein" Konzept. Ihr Versuch, als Modell für die Problematik aussieht wie eine direkte übersetzung von Java zu Gehen. Das wird nicht funktionieren. Technisch Freude miao ' s Antwort ist eine komplette und vernünftige Erklärung. Go ist statisch typisiert und ein *Lion ist nicht ein Cat, auch wenn ein *Lion zuweisbar ist eine variable vom Typ Cat; aber abtretbarkeit spielt keine Rolle, während entsprechende Typ-Signaturen. Es gibt keine Notwendigkeit für die Fabriken Gehen. Werfen Sie einen Blick auf, wie die stdlib nicht Dinge, und halt das schreiben von Java-code in Go.
Mit einer Funktion als eine Art ist nicht etwas, was einzigartig für Java, @Volker. Dieser code wird nicht übersetzt, aus Java.

InformationsquelleAutor zian | 2016-01-26

Schreibe einen Kommentar