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