ホームページ > バックエンド開発 > Golang > Go でジェネリック型を制約して特定のフィールドが存在するようにするにはどうすればよいですか?

Go でジェネリック型を制約して特定のフィールドが存在するようにするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-06 06:41:12
オリジナル
491 人が閲覧しました

How Can I Constrain Generic Types in Go to Ensure the Presence of Specific Fields?

フィールドの存在に関するジェネリック型の制約

質問

開発者は、特定のフィールドを持つ値を受け入れるジェネリック関数を Go で定義する必要があることがよくあります。一般的な例は、整数型の ID という名前のフィールドにアクセスするという要件です。

回答

残念ながら、インターフェイスでフィールドを定義しない限り、Go でそのような制約を強制することは実現できません。一部の提案とは異なり、現在の実装ではジェネリックスの構造型はサポートされていません。

インターフェイス制約

フィールドの存在を強制するには、インターフェイスでのフィールドの定義が必要です。このインターフェイスは型制約として機能し、ジェネリック関数に渡される型が必須フィールドを確実に所有するようにします。

type IDer interface {
    ID int
}
ログイン後にコピー

アクセス可能なプロパティ

ジェネリック関数内の制約されたフィールドにアクセスするには、渡される型はインターフェイスの制約を満たす必要があります。このアプローチは、目的のフィールドの存在とアクセス可能性を確保するためのメカニズムを提供します。

func Print[T IDer](s T) {
    fmt.Print(s.ID)
}
ログイン後にコピー

制限事項

このアプローチは、部分的な構造体を含むフィールドへのアクセスをサポートしていないことに注意することが重要です。種類。ただし、将来のリリースではこの制限に対処する可能性があります。

結論

ジェネリック関数で特定のフィールドの存在を強制するには、インターフェイスで対応するメソッドを定義する必要があります。この制約により、関数に渡される型が操作に必要なフィールドを確実に所有できるようになります。

以上がGo でジェネリック型を制約して特定のフィールドが存在するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート