首頁 > 後端開發 > Golang > 如何為 Go 中的現有類型新增方法?

如何為 Go 中的現有類型新增方法?

Susan Sarandon
發布: 2025-01-03 10:07:39
原創
778 人瀏覽過

How Can I Add Methods to Existing Types in Go?

擴充Go 中的現有型別

當嘗試從匯入的套件中向現有型別新增自訂方法時,您可能會遇到錯誤,表示您無法在非本機類型上定義新方法。此限制源自於 Go 的類型系統,該系統不允許修改其他地方定義的類型。

要規避此限制,有兩種主要方法:

  1. 定義一個新類型匿名欄位: 這涉及建立一個新類型,將原始類型嵌入為匿名欄位。然後,您可以將自訂方法新增至新類型。
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. 嵌入現有類型: 您可以使用明確嵌入現有類型,而不是匿名嵌入嵌入關鍵字。這提供了對原始類型的字段和方法的訪問,同時允許您定義其他方法。
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)
}
登入後複製

以上是如何為 Go 中的現有類型新增方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板