Heim >Backend-Entwicklung >Golang >Wie kann ich Methoden zu vorhandenen Typen in Go hinzufügen?

Wie kann ich Methoden zu vorhandenen Typen in Go hinzufügen?

Susan Sarandon
Susan SarandonOriginal
2025-01-03 10:07:39769Durchsuche

How Can I Add Methods to Existing Types in Go?

Vorhandene Typen in Go erweitern

Beim Versuch, benutzerdefinierte Methoden zu vorhandenen Typen aus importierten Paketen hinzuzufügen, wird möglicherweise eine Fehlermeldung angezeigt, die darauf hinweist, dass Sie Für nicht-lokale Typen können keine neuen Methoden definiert werden. Diese Einschränkung ergibt sich aus dem Typsystem von Go, das Änderungen an anderswo definierten Typen nicht zulässt.

Um diese Einschränkung zu umgehen, gibt es zwei primäre Ansätze:

  1. Definieren Sie einen neuen Typ mit Anonyme Felder: Dazu gehört die Erstellung eines neuen Typs, der den ursprünglichen Typ als anonyme Felder einbettet. Anschließend können Sie benutzerdefinierte Methoden zu Ihrem neuen Typ hinzufügen.
type MyRoute struct {
    *mux.Route
}

func (m *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return m.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

type MyRouter struct {
    *mux.Router
}

func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route {
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}
  1. Den vorhandenen Typ einbetten: Anstelle der anonymen Einbettung können Sie den vorhandenen Typ explizit mit einbetten das Einbettungsschlüsselwort. Dadurch erhalten Sie Zugriff auf die Felder und Methoden des ursprünglichen Typs und können gleichzeitig zusätzliche Methoden definieren.
type MyRoute embed mux.Route

func (m *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return m.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

type MyRouter embed mux.Router

func (r *MyRouter) Subroute(tpl string, h http.Handler) *mux.Route {
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

Das obige ist der detaillierte Inhalt vonWie kann ich Methoden zu vorhandenen Typen in Go hinzufügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn