私は golang を初めて使用しており、次の構造を勉強しています:
リーリーここで、T
は int
または bool
次の関数を定義しました:
リーリーbool などのさまざまなデータ型に対して上記の関数を使用しようとすると、次のようになります。
リーリー次のエラー メッセージが表示されます:
リーリー「X」を「X」として使用できないというメッセージが表示され、非常にわかりにくくなっています。ここで私が間違っていることを理解するのを手伝ってくれませんか?
まず第一に、ここで大規模なユースケースを評価するのは困難ですが、ランタイム型を実行しているため、ジェネリックはここでは最適ではない可能性がありますチェック (例: f.defaultValue.(T)
)。
2 番目に、go 1.20
を使用しているようですが、混乱を招くエラーが発生します:
https://www.php.cn/link/63e8e3643e7f7198858eef325b0600f9
リーリー 最新の Playground バージョン (この記事の執筆時点では go 1.21
) を使用すると、より詳細なコンパイル エラーが発生します:
https://www.php.cn/link/2d1bcedd27b586d2a9562a0f8e076b41
リーリー型を示します bool
指定された位置 (./prog.go:13:14
) は型制約の結果です。
したがって、この型制約 bool
が非ジェネリック関数シグネチャと一致するという理由だけで、次のようになります。
リーリー
この人為的な例
を使用してコンパイル エラーを「解決」できます: リーリー ただし、繰り返しになりますが、ジェネリックは特定のユースケースにとって最適なソリューションではない可能性があると思います。
以上がGolang ジェネリックス - 関数ポインターを渡すときに同じ型の代わりに型を使用することはできませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。