Ich möchte Route- gorilla/mux
und Routertypen eine praktische Util-Methode hinzufügen :
package util
import(
"net/http"
"github.com/0xor1/gorillaseed/src/server/lib/mux"
)
func (r *mux.Route) Subroute(tpl string, h http.Handler) *mux.Route{
return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}
func (r *mux.Router) Subroute(tpl string, h http.Handler) *mux.Route{
return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}
aber der Compiler informiert mich
Neue Methoden für den nicht lokalen Typ mux.Router können nicht definiert werden
Wie würde ich das erreichen? Erstelle ich einen neuen Strukturtyp mit anonymen Feldern mux.Route und mux.Router? Oder etwas anderes?
go
extension-methods
Daniel Robinson
quelle
quelle
“extension methods are not object-oriented”
für C # als nicht objektorientiert ( ) betrachtet, aber als ich sie heute betrachtete, wurde ich sofort an die Schnittstellen von Go (und ihren Ansatz zum Überdenken der Objektorientierung) erinnert, und dann hatte ich genau diese Frage.Antworten:
Wie der Compiler erwähnt, können Sie vorhandene Typen in einem anderen Paket nicht erweitern. Sie können Ihren eigenen Alias oder Ihr eigenes Unterpaket wie folgt definieren:
oder durch Einbetten des Original-Routers:
quelle
mux.Router
Instanzen zuMyRouter
s? zB wenn Sie eine Bibliothek haben, die zurückgibt,mux.Router
aber Ihre neuen Methoden verwenden möchten?Ich wollte die Antwort von @jimt hier erweitern . Diese Antwort ist richtig und hat mir enorm geholfen, dies zu klären. Es gibt jedoch einige Einschränkungen bei beiden Methoden (Alias, Einbettung), mit denen ich Probleme hatte.
Hinweis : Ich verwende die Begriffe Eltern und Kind, bin mir jedoch nicht sicher, ob dies für die Komposition am besten geeignet ist. Grundsätzlich ist Eltern der Typ, den Sie lokal ändern möchten. Child ist der neue Typ, der versucht, diese Änderung zu implementieren.
Methode 1 - Typdefinition
Methode 2 - Einbetten ( offizielle Dokumentation )
Zusammenfassung
Sie können dies im folgenden Code sehen.
Arbeitsbeispiel auf dem Spielplatz
quelle