ジェネリックを使用して、渡された値のフィールドの可用性を強制する
Go では、ジェネリックを使用して型の安全性を強化し、明示的なプロパティの必要性を排除できます。型キャスト。ただし、特定のフィールドを必要とする値を操作する場合、Go 1.18 のジェネリックスの現在の実装では課題が生じます。
問題ステートメント
提供された例で概説されているように、 ID int などの特定のフィールドの値を受け入れる汎用関数を定義しようとしましたが、現在のアプローチでは成功しませんでした。目標は、関数に渡されるすべての値にこのプロパティがあり、関数自体内でアクセスできるようにすることです。
Go 1.18 ジェネリックの制限
現在、Goジェネリックスは構造型をサポートしていません。つまり、構造体にのみ基づいて、構造体に特定のフィールドがあるかどうかを判断できません。 ~T (チルダ型) 近似は、基になる型が正確に T である型を示すために使用されます。
この例では、~struct{ ID int } は、基になる型が正確に struct{ ID int } である型を指定します。これには、他のフィールドとともに ID int フィールドを持つ構造体は含まれません。
解決策
インターフェイス制約にフィールド項が存在しない場合、強制することはできません。 Go 1.18 では、インターフェイスでメソッドを定義せずにジェネリックを使用して特定のフィールドを利用できるようになります。したがって、共用体の共通フィールドにアクセスする必要がある場合は、提供されている説明を参照する必要があります。
以上がGo ジェネリックは、渡された値の特定フィールドの可用性をどのように強制できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。