Go にサードパーティの型を埋め込むにはどうすればよいですか?

王林
リリース: 2024-02-09 20:20:26
転載
1036 人が閲覧しました

如何在 Go 中嵌入第三方类型?

Go 言語では、サードパーティの型の埋め込みは、元のコードを変更せずに既存の型を拡張およびカスタマイズできる強力な機能です。サードパーティの型を埋め込むことで、そのメソッドとプロパティを継承してコードの再利用と拡張を実現できます。この記事では、Go 言語にサードパーティの型を埋め込む方法を紹介し、実際のアプリケーション シナリオの例をいくつか示します。あなたが Go 言語の初心者であっても、経験豊富な開発者であっても、この記事は実践的なガイダンスを提供できると思います。

質問内容

私のアプリケーションでは、github.com/shopspring/decimal という 10 進数のパッケージを使用しています。

decmal.decmal 型でカスタム関数を作成するために、独自の decmal 型を作成し、埋め込み decmal.decmal:

リーリー

これはうまくいきました。10 進数 オブジェクトのメソッドにアクセスできるようになりました:

リーリー

一部の decmal.decmal メソッドでは、タイプ decmal.decmal (例:

) のパラメーターが必要です。 リーリー

上の行は次のエラーのためコンパイルされません: b (10 進数型の変数) を 10 進数として使用できません。 a.addパラメータの 10 進数値

10 進数 10 進数.10 進数 :

に変換してみました リーリー

次のエラーのため、上記のコードはコンパイルできません:

リーリー

質問: 「親」メソッドの使用を可能にする方法でサードパーティの型を拡張/埋め込む方法 はメソッドのパラメータとして拡張型を使用できますこれには親の型引数が必要ですか?

解決策

型を指定して宣言されているが、明示的なフィールド名が指定されていないフィールドは、埋め込みフィールドと呼ばれます。埋め込みフィールドは、型名 t または非インターフェイス型名 *t へのポインタとして指定する必要があり、t 自体はポインタ型であってはなりません。 修飾されていない型名はフィールド名として機能します。

したがって、簡単で汚い解決策は、単純に「非修飾型名」を使用してフィールドにアクセスすることです。

リーリー

ただし、新しい型の使用時によりシームレスなエクスペリエンスを求めている場合、唯一の選択肢は、元の型を必要とするメソッドを再宣言し、代わりに新しい型を使用することです。これらの再宣言されたメソッドは、あるインスタンスの埋め込みフィールドを別のインスタンスの埋め込みフィールドに渡すメソッドの単純なラッパーであるだけで済みます。例えば:### リーリー

以上がGo にサードパーティの型を埋め込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!