在 Go 中,不直接支持从不同包扩展现有类型。但是,还有其他技术可以实现类似的功能。
一种方法是定义一个新类型,将现有类型嵌入为匿名字段。这允许您在新类型上定义其他方法,而无需修改原始类型。下面是一个示例:
type MyRoute struct { mux.Route } func (r *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route { return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) }
另一种选择是直接将现有类型嵌入为命名字段,并使用指针来访问和扩展嵌入类型。
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) }
在某些情况下,创建一个扩展包可能是可行的扩展包,为现有类型提供附加功能。但是,这需要修改原始包的源代码,并且通常不建议用于共享库。
适当的方法取决于您项目的具体要求和限制。如果您需要直接访问和修改现有类型,嵌入可能适合。如果您想对 API 隐藏基础类型,请考虑使用匿名字段。如果您可以自由修改原始源代码,请探索扩展包。
以上是如何在不修改原有代码的情况下扩展Go中现有的类型?的详细内容。更多信息请关注PHP中文网其他相关文章!