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