ホームページ  >  記事  >  バックエンド開発  >  Golang ジェネリックス - 関数ポインターを渡すときに同じ型の代わりに型を使用することはできません

Golang ジェネリックス - 関数ポインターを渡すときに同じ型の代わりに型を使用することはできません

PHPz
PHPz転載
2024-02-06 10:33:03513ブラウズ

Golang 泛型 - 在传递函数指针时不能使用类型代替相同类型

質問の内容

私は golang を初めて使用しており、次の構造を勉強しています:

リーリー

ここで、Tint または 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 サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。