首页 > 后端开发 > Golang > 如何在不修改原有代码的情况下扩展Go中现有的类型?

如何在不修改原有代码的情况下扩展Go中现有的类型?

Susan Sarandon
发布: 2024-12-17 07:46:24
原创
580 人浏览过

How Can I Extend Existing Types in Go Without Modifying the Original Code?

扩展 Go 中的现有类型

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板