ジェネリックス: インターフェースに埋め込まれた制約と構造

王林
リリース: 2024-02-08 23:21:19
転載
547 人が閲覧しました

ジェネリックス: インターフェースに埋め込まれた制約と構造

php エディタ Xiaoxin は、ジェネリックの入門を提供します。ジェネリックとは、インターフェイスに埋め込まれた制約と構造であり、これにより、コードを記述する際の柔軟性と効率が向上します。ジェネリックスを使用すると、コンパイル時に型エラーを見つけて解決できるため、コードの可読性と保守性が向上します。ジェネリックスは、より一般的なデータ構造とアルゴリズムの設計にも役立ち、コードの再利用性が向上します。この記事では、ジェネリック プログラミングをよりよく理解し、適用できるように、ジェネリックの概念、使用法、実際のアプリケーションについて詳しく説明します。

問題の内容

次のコードはコンパイルできず、報告されます./main.go:35:7: テストが制約を満たしていません (main.structwithname にテストがありません)

リーリー

ただし、structwithname をコメント アウトし、~struct ブロックのコメントを解除すると、正常にコンパイルされます。 2つの意味上の違いが理解できません。

私がやろうとしているのは、汎用的な方法で構造体を処理できる汎用メソッド、つまり x := s{} を作成し、それを外部ライブラリに渡すことです。この場合、それは terraform プロバイダー用であり、リソース内のコードは非常に似ています。既存のプロバイダーに見られる重複の量が少し気になります。私の場合、リソースは非常に似ており、いくつかはそれらの間にあります。デフォルトの構造体には 1 つまたは 2 つのフィールドしかありません)。私は、同様のことをすべて実行し、特異性のみを別の場所に持つ一連のジェネリック メソッドを作成できるようにしたいと考えています (当たり前です!)。

私はまだ学習の初期段階にあるため、コンパイラ エラーを理解できません。

解決策

私の理解が正しければ、あなたが本当に望んでいることは不可能です。 Go ジェネリックは、構造体フィールドのサブセットへのアクセスをサポートしていません。

関係するエラーに関しては...

型の名前は型の ID を指定します。名前が異なる 2 つの型 (相互のエイリアスではない) は常に異なるため、teststructwithname は 2 つです。違うタイプ。これらに共通する唯一の点は、基礎となるタイプです。

型制約インターフェイス { structwithname } このインターフェイスは、型を 1 つだけ含む型セット、つまり structwithname であり、test は次の型ではないためです。これは、制約を満たすために test 型を使用できないことを意味します。

type struct { name string } は名前のない型です。名前のない型の基になる型は型自体、つまり struct { name string } の基になる型です。 struct { 名前文字列 } です。

制約内の型の前にあるチルダ、つまり ~t は、任意の 型を意味し、その 基礎となる型 は # と同じです。 ##t。または、より正確には、 形式

~t の項目の型セットは、基本型が t であるすべての型のセットです。

だからこれを行うと

リーリー

その後、制約された型セットには、基本型として

struct { name string } を持つ任意の型が含まれます。

以上がジェネリックス: インターフェースに埋め込まれた制約と構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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