Go アプリケーションを開発する場合、インターフェイス タイプの制約によって課される制限を理解することが不可欠です。共用体などの型要素を含むインターフェイス型は、その使用が制限されています。この記事では、インターフェイスの型制約の詳細を詳しく掘り下げ、その影響を示す例を示します。
Go では、共用体などの型要素を含むインターフェイスが考慮されます。非基本的。これは、変数の型として使用したり、他の非インターフェイス型のコンポーネントとして使用したりできないことを意味します。たとえば、次の Number インターフェイスは共用体を含むため非基本的です:
type Number interface { int | int64 | float64 }
Number のスライスを初期化しようとしたとき次のようなインターフェイス:
a := []Number{Number(1), Number(2), Number(3), Number(4)}
Go は、Number インターフェイスを型変換で使用できないため (Number(1) に見られるように)、「インターフェイスには型制約が含まれています」というエラーが発生します。
Go 言語仕様に従って、基本的でないインターフェイスは、型制約として、または制約として使用される他のインターフェイスの要素としてのみ使用できます。値や変数の型を指定することはできません。これは、インターフェイスに type 要素が存在すると、インターフェイスが非基本になり、直接インスタンス化と互換性がなくなるためです。
非基本インターフェイスは使用できません型として直接使用することができ、型制約として使用できます。たとえば、Number インターフェイスによって制約されたジェネリック型パラメーター T を使用する次の Co座標構造体について考えてみましょう。
type Coordinates[T Number] struct { x, y T }
このシナリオでは、Coowned 構造体は Number インターフェイスの制約を満たす型でのみインスタンス化できます。
型制約のあるインターフェイス型は、Go アプリケーションの型安全性を確保する上で重要な役割を果たします。非基本インターフェイスの制限を理解し、型制約内でそれらを正しく利用することで、開発者は堅牢で効率的なコードを作成できます。
以上がGo で型制約のあるインターフェイスを直接使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。