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

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

Susan Sarandon
Susan Sarandon原创
2024-12-17 07:46:24643浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn