php エディタ Xiaoxin は、ジェネリックの入門を提供します。ジェネリックとは、インターフェイスに埋め込まれた制約と構造であり、これにより、コードを記述する際の柔軟性と効率が向上します。ジェネリックスを使用すると、コンパイル時に型エラーを見つけて解決できるため、コードの可読性と保守性が向上します。ジェネリックスは、より一般的なデータ構造とアルゴリズムの設計にも役立ち、コードの再利用性が向上します。この記事では、ジェネリック プログラミングをよりよく理解し、適用できるように、ジェネリックの概念、使用法、実際のアプリケーションについて詳しく説明します。
次のコードはコンパイルできず、報告されます./main.go:35:7: テストが制約を満たしていません (main.structwithname にテストがありません)
ただし、structwithname
をコメント アウトし、~struct ブロックのコメントを解除すると、正常にコンパイルされます。 2つの意味上の違いが理解できません。
私がやろうとしているのは、汎用的な方法で構造体を処理できる汎用メソッド、つまり x := s{}
を作成し、それを外部ライブラリに渡すことです。この場合、それは terraform プロバイダー用であり、リソース内のコードは非常に似ています。既存のプロバイダーに見られる重複の量が少し気になります。私の場合、リソースは非常に似ており、いくつかはそれらの間にあります。デフォルトの構造体には 1 つまたは 2 つのフィールドしかありません)。私は、同様のことをすべて実行し、特異性のみを別の場所に持つ一連のジェネリック メソッドを作成できるようにしたいと考えています (当たり前です!)。
私はまだ学習の初期段階にあるため、コンパイラ エラーを理解できません。
私の理解が正しければ、あなたが本当に望んでいることは不可能です。 Go ジェネリックは、構造体フィールドのサブセットへのアクセスをサポートしていません。
関係するエラーに関しては...
型の名前は型の ID を指定します。名前が異なる 2 つの型 (相互のエイリアスではない) は常に異なるため、test
と structwithname
は 2 つです。違うタイプ。これらに共通する唯一の点は、基礎となるタイプです。
型制約インターフェイス { structwithname }
このインターフェイスは、型を 1 つだけ含む型セット、つまり structwithname
であり、test
は次の型ではないためです。これは、制約を満たすために test
型を使用できないことを意味します。
type struct { name string }
は名前のない型です。名前のない型の基になる型は型自体、つまり struct { name string }
の基になる型です。 は struct { 名前文字列 }
です。
制約内の型の前にあるチルダ、つまり ~t
は、任意の 型を意味し、その 基礎となる型 は # と同じです。 ##t。または、より正確には、
形式
だからこれを行うと
リーリー
その後、制約された型セットには、基本型としてstruct { name string } を持つ任意の型が含まれます。
以上がジェネリックス: インターフェースに埋め込まれた制約と構造の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。