Heim >Backend-Entwicklung >Golang >Wie kann ich vorhandene Typen in Go erweitern, ohne den ursprünglichen Code zu ändern?
In Go wird das Erweitern vorhandener Typen aus verschiedenen Paketen nicht direkt unterstützt. Es gibt jedoch alternative Techniken, um eine ähnliche Funktionalität zu erreichen.
Ein Ansatz besteht darin, einen neuen Typ zu definieren, der den vorhandenen Typ als anonymes Feld einbettet. Dadurch können Sie zusätzliche Methoden für Ihren neuen Typ definieren, ohne den Originaltyp zu ändern. Hier ist ein Beispiel:
type MyRoute struct { mux.Route } func (r *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route { return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
Eine andere Möglichkeit besteht darin, den vorhandenen Typ direkt als benanntes Feld einzubetten und die Zeiger zu verwenden, um auf den eingebetteten Typ zuzugreifen und ihn zu erweitern.
type MyRouter struct { *mux.Router } func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route { return r.Router.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
In manchen Fällen kann es sinnvoll sein, ein Erweiterungspaket zu erstellen, das zusätzliche Funktionalität bereitstellt vorhandene Typen. Dies erfordert jedoch eine Änderung des Quellcodes des Originalpakets und wird im Allgemeinen nicht für gemeinsam genutzte Bibliotheken empfohlen.
Der geeignete Ansatz hängt von den spezifischen Anforderungen und Einschränkungen Ihres Projekts ab. Wenn Sie direkt auf den vorhandenen Typ zugreifen und ihn ändern müssen, kann die Einbettung geeignet sein. Erwägen Sie die Verwendung anonymer Felder, wenn Sie den zugrunde liegenden Typ vor der API verbergen möchten. Entdecken Sie Erweiterungspakete, wenn Sie die Freiheit haben, den ursprünglichen Quellcode zu ändern.
Das obige ist der detaillierte Inhalt vonWie kann ich vorhandene Typen in Go erweitern, ohne den ursprünglichen Code zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!