ホームページ >バックエンド開発 >Golang >元のコードを変更せずに Go で既存の型を拡張するにはどうすればよいですか?

元のコードを変更せずに Go で既存の型を拡張するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 07:46:24582ブラウズ

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

Go での既存の型の拡張

Go では、さまざまなパッケージからの既存の型の拡張は直接サポートされていません。ただし、同様の機能を実現する別の手法もあります。

匿名フィールドの組み込み

1 つのアプローチは、既存の型を匿名フィールドとして埋め込む新しい型を定義することです。これにより、元の型を変更せずに、新しい型に追加のメソッドを定義できます。以下に例を示します。

type MyRoute struct {
    mux.Route
}

func (r *MyRoute) Subroute(tpl string, h http.Handler) *mux.Route {
    return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h)
}

直接埋め込み

もう 1 つのオプションは、既存の型を名前付きフィールドとして直接埋め込み、ポインターを使用して埋め込まれた型にアクセスして拡張することです。

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

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