Einführung
Schnittstellen in der Programmierung definieren eine Reihe von Methoden, die ein Typ haben muss implementieren, um als gültige Schnittstellenimplementierung betrachtet zu werden. Wenn eine Funktion eine Schnittstelle implementiert, muss ihre Methodensignatur mit der Methodensignatur der Schnittstelle übereinstimmen.
Schnittstelle und Implementierung
In diesem Fall haben wir die folgende Schnittstelle:
type Handler interface { ServeHTTP(*Conn, *Request) }
Diese Schnittstelle definiert eine Methode namens ServeHTTP, die einen Conn und einen Request as entgegennimmt Argumente.
Die folgende Implementierung des Counter-Typs erfüllt die Handler-Schnittstelle:
type Counter int func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) { fmt.Fprintf(c, "counter = %d\n", ctr); ctr++; }
Konvertieren einer Funktion zur Implementierung der Schnittstelle
Manchmal Möglicherweise haben wir eine Funktion, die mit der Signatur der Schnittstellenmethode übereinstimmt, aber nicht direkt als Methode implementiert ist. In solchen Fällen kann die folgende Technik verwendet werden, um die Funktion in eine Schnittstellenimplementierung umzuwandeln:
// Now we define a type to implement ServeHTTP: type HandlerFunc func(*Conn, *Request) func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) // the receiver's a func; call it } // Convert function to attach method, implement the interface: var Handle404 = HandlerFunc(notFound);
In diesem Beispiel ist die notFound-Funktion keine Methode, aber sie stimmt mit der Signatur der ServeHTTP-Methode überein. Um es mit der Handler-Schnittstelle kompatibel zu machen, erstellen wir einen HandlerFunc-Typ, der die Funktion in eine Methode einschließt. Dann erstellen wir eine Instanz von HandlerFunc mit notFound als Wert. Diese Instanz, Handle404, implementiert jetzt die Handler-Schnittstelle und kann als gültige Implementierung verwendet werden.
Zusammenfassung
Diese Technik zeigt, wie Funktionen, die die Methodensignatur einer Schnittstelle erfüllen, dies können in Schnittstellenimplementierungen konvertiert werden, auch wenn es sich nicht um Methoden eines benutzerdefinierten Typs handelt. Dieser Ansatz ist besonders nützlich, wenn mit vorhandenen Funktionen gearbeitet wird, die in schnittstellenbasierte Systeme übernommen werden müssen.
Das obige ist der detaillierte Inhalt vonWie konvertiert man eine Funktion in eine Schnittstellenimplementierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!