Maison >développement back-end >Golang >Comment puis-je ajouter des méthodes aux types existants dans Go ?

Comment puis-je ajouter des méthodes aux types existants dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-03 10:07:39765parcourir

How Can I Add Methods to Existing Types in Go?

Extension de types existants dans Go

Lorsque vous essayez d'ajouter des méthodes personnalisées à des types existants à partir de packages importés, vous pouvez rencontrer une erreur indiquant que vous ne peut pas définir de nouvelles méthodes sur des types non locaux. Cette limitation provient du système de types de Go, qui interdit les modifications des types définis ailleurs.

Pour contourner cette restriction, il existe deux approches principales :

  1. Définir un nouveau type avec Champs anonymes : Cela implique la création d'un nouveau type qui intègre le type d'origine sous forme de champs anonymes. Vous pouvez ensuite ajouter des méthodes personnalisées à votre nouveau type.
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. Intégrer le type existant : Au lieu d'une intégration anonyme, vous pouvez explicitement intégrer le type existant en utilisant le mot-clé d'intégration. Celui-ci donne accès aux champs et méthodes du type d'origine tout en permettant de définir des méthodes supplémentaires.
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)
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn