ジェネリック構造体における型互換の値の割り当て
Go では、ジェネリック型を使用して、変数型のフィールドを持つ構造体の作成が可能です。ただし、リテラル値をフィールドに割り当てると、「IncompatibilityAssign」エラーが発生する場合があります。
次のコードを考えてみましょう:
type constraint interface { ~float32 | ~float64 } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
このコードは、制約インターフェイスに浮動小数点型のみが含まれるため、コンパイルされます。ただし、整数型を制約に追加すると、
type constraint interface { ~float32 | ~float64 | ~int } type foo[T constraint] struct { val T } func (f *foo[float64]) setValToPi() { f.val = 3.14 }
型なし浮動小数点数定数は整数型のフィールドに直接割り当てることができないため、「IncompatibilityAssign」エラーが発生します。
エラーの理由
制約が異なる型の複数の型を許可しているためにエラーが発生しますグループ。リテラル値をジェネリック型のフィールドに割り当てる場合、コンパイラはコンパイル時にフィールドの正確な型を判断できません。型なしの浮動小数点定数を割り当てると、整数型のフィールドに互換性のない型が割り当てられ、エラーが発生する可能性があります。
解決策
このエラーを解決するには、次のようにします。いくつかのオプションがあります:
結論
「IncompatibilityAssign」エラーの背後にある理由を理解すると、適切な解決策を採用して、汎用構造体フィールドの型互換性を確保できます。
以上がGo でジェネリック構造体フィールドに値を代入するときに「IncompatibilityAssign」エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。