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
Libérer: 2025-01-03 10:07:39
original
836 Les gens l'ont consulté

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)
}
Copier après la connexion
  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)
}
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal