V を推論できません: 制約実装からの推論型パラメータを解決します
目標は、結果の保存と読み込みをサポートするインターフェイスを Go で作成することですさまざまなデータベースでさまざまなデータ型をサポートしています。
type WritableType interface { ~int | ~string | ~float64 } type ConfigStorage[K, V WritableType] interface { get(key K) (V, error) set(key K, value V) (bool, error) }
問題が発生しますファイル システム ストレージを実装する場合:
type FileSystemStorage[K, V WritableType] struct { } func (f FileSystemStorage[K, V]) get(key K) (V, error) { // Code to load data from JSON file } func (f FileSystemStorage[K, V]) set(key K, value V) (bool, error) { // Code to save data as JSON file }
SetValue を呼び出すと、正常に機能します。ただし、GetValue を呼び出すと、コンパイラでエラーが発生します:
cannot infer V
Solutions
Go 1.21 以降の場合:
Go 1.21 では、インターフェイス メソッドで使用される型を考慮するように型推論が改善されました。したがって、型パラメーターを指定せずに GetValue を呼び出すことができるようになりました:
result, _ = GetValue(fileStorage, "key")
Go 1.20 以下の場合:
現在の型推論アルゴリズムでは推論が許可されていないため、制約実装からの V では、GetValue:
GetValue[string, string](fileStorage, "key")を呼び出すときに明示的な型パラメーターを指定する必要があります。
以上がジェネリックインターフェイスで型制約を使用する場合の Go の「Cannot Infer V」エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。