ホームページ  >  記事  >  バックエンド開発  >  変換で型制約のある Go インターフェイスを使用できないのはなぜですか?

変換で型制約のある Go インターフェイスを使用できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-07 03:36:03182ブラウズ

Why Can't I Use a Go Interface with Type Constraints in a Conversion?

Go インターフェイスの型制約を理解する

Go インターフェイスは、データ型を抽象化し、コードの再利用を促進するための強力なツールです。ただし、インターフェイスの使用は特定のルールによって制限されており、その 1 つは型要素を含むインターフェイスの禁止です。

指定されたコード スニペットでは、「インターフェイスには型制約が含まれています: 変換ではインターフェイス Number を使用できません」というエラーが表示されます。 」という制約が生じるためです。 Number インターフェイス。タイプ Number インターフェイス { int | として定義されます。 int64 | float64 }、3 つの特定の型の共用体を定義します。これにより、Number は非基本インターフェイスになり、値や変数の型として使用できなくなります。

言語仕様では、型変換や他の型の要素として非基本インターフェイスを使用することは許可されていません。 Number は新しい値の構築に使用できないため、変数を []Number{Number(1), Number(2), Number(3), Number(4)} として初期化することはできません。

解決するにはこの制限がある場合は、任意の型の値を保持できるインターフェイス タイプを使用できます。{}要素は Number の型制約によって制限されないため、aa 変数は []interface{}{interface{}(1)、interface{}(2)、interface{}(3)、4} として正常に作成されます。

あるいは、NNumber などの型制約のないインターフェイスを定義し、それを使用して型安全なスライスを作成することもできます。 NNumber には型制限が含まれていないため、aaa 変数は []NNumber{NNumber(1), NNumber(2), NNumber(3), 4} としてエラーなく初期化されます。

基本的な概念と概念を理解することで、非基本インターフェイスとその周囲の制限を考慮すると、型制約に関連する潜在的な問題を回避しながら、Go インターフェイスを効果的に利用できます。

以上が変換で型制約のある Go インターフェイスを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。