Funktion, die eine Schnittstelle implementiert
In Go definiert eine Schnittstelle eine Reihe von Methoden, die ein Typ implementieren muss. Ein Typ implementiert eine Schnittstelle, wenn er alle von der Schnittstelle deklarierten Methoden bereitstellt.
Beispiel 1: Direkte Implementierung einer Schnittstelle
Der folgende Code definiert die Handler-Schnittstelle und a Typ, der es implementiert:
type Handler interface { ServeHTTP(*Conn, *Request) } type Counter int func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) { fmt.Fprintf(c, "counter = %d\n", ctr) ctr++ }
Hier verfügt der Counter-Typ über eine ServeHTTP-Methode, die die von der Handler-Schnittstelle benötigten Argumente entgegennimmt. Daher implementiert Counter die Handler-Schnittstelle.
Beispiel 2: Implementieren einer Schnittstelle mit einer Funktion
In diesem Beispiel ist eine Funktion namens notFound kein gültiger Handler-Typ, weil Es verfügt nicht über die erforderliche Methode:
func notFound(c *Conn, req *Request) { // Not a valid Handler }
Damit notFound die Handler-Schnittstelle implementiert, muss es in die folgende Form „gemanipuliert“ werden:
// Define a type that implements ServeHTTP type HandlerFunc func(*Conn, *Request) func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) // Function call with arguments } // Convert function to implement the interface var Handle404 = HandlerFunc(notFound)
Hier HandlerFunc ist ein Typ, der zwei Argumente akzeptiert und nichts zurückgibt. Indem notFound in HandlerFunc eingeschlossen und einer Variablen zugewiesen wird, wird notFound zu einem gültigen Handlertyp.
Erklärung
Das Schlüsselkonzept hier ist, dass die Variable Handle404 verwendet werden kann als Handler, obwohl es eigentlich eine Funktion ist. Dies liegt daran, dass der HandlerFunc-Typ die ServeHTTP-Methode für die Funktion implementiert. Wenn Sie Handle404.ServeHTTP aufrufen, ruft es tatsächlich die Funktion notFound auf.
Dieser Ansatz ermöglicht die Verwendung von Funktionen, die die Handler-Schnittstelle nicht direkt implementieren. Es handelt sich im Wesentlichen um eine Möglichkeit, eine Funktion an die Anforderungen einer Schnittstelle anzupassen.
Das obige ist der detaillierte Inhalt vonWie können Sie eine Funktion anpassen, um eine Schnittstelle in Go zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!