ホームページ >バックエンド開発 >Golang >Go で既存の型にメソッドを追加するにはどうすればよいですか?

Go で既存の型にメソッドを追加するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-03 10:07:39780ブラウズ

How Can I Add Methods to Existing Types in Go?

Go での既存の型の拡張

インポートされたパッケージから既存の型にカスタム メソッドを追加しようとすると、次のことを示すエラーが発生する場合があります。非ローカル型には新しいメソッドを定義できません。この制限は、他の場所で定義された型への変更を禁止する Go の型システムに由来します。

この制限を回避するには、主に 2 つのアプローチがあります。

  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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。