開発者は、特定のフィールドを持つ値を受け入れるジェネリック関数を Go で定義する必要があることがよくあります。一般的な例は、整数型の ID という名前のフィールドにアクセスするという要件です。
残念ながら、インターフェイスでフィールドを定義しない限り、Go でそのような制約を強制することは実現できません。一部の提案とは異なり、現在の実装ではジェネリックスの構造型はサポートされていません。
フィールドの存在を強制するには、インターフェイスでのフィールドの定義が必要です。このインターフェイスは型制約として機能し、ジェネリック関数に渡される型が必須フィールドを確実に所有するようにします。
type IDer interface { ID int }
ジェネリック関数内の制約されたフィールドにアクセスするには、渡される型はインターフェイスの制約を満たす必要があります。このアプローチは、目的のフィールドの存在とアクセス可能性を確保するためのメカニズムを提供します。
func Print[T IDer](s T) { fmt.Print(s.ID) }
このアプローチは、部分的な構造体を含むフィールドへのアクセスをサポートしていないことに注意することが重要です。種類。ただし、将来のリリースではこの制限に対処する可能性があります。
ジェネリック関数で特定のフィールドの存在を強制するには、インターフェイスで対応するメソッドを定義する必要があります。この制約により、関数に渡される型が操作に必要なフィールドを確実に所有できるようになります。
以上がGo でジェネリック型を制約して特定のフィールドが存在するようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。