ホームページ  >  記事  >  バックエンド開発  >  Golang ジェネリクスはスライス型または配列型を除外します

Golang ジェネリクスはスライス型または配列型を除外します

WBOY
WBOY転載
2024-02-13 11:00:19687ブラウズ

Golang 泛型排除切片或数组类型

php エディター Xiaoxin が今日、Golang ジェネリックに関する記事をお届けします。ジェネリックは Golang で待望の機能ですが、最新の提案ではスライス型または配列型のサポートが除外されています。この記事では、この決定の理由を説明し、開発者への影響について説明します。もっと詳しく見てみましょう!

質問内容

Goにはスライスや配列に適用すべきではないジェネリックを含む関数があります。でもどうすればいいのか分かりません。この例は Typescript でのみ見つかりましたが、これ以上はわかりませんでした。たとえば、何かが欲しいです。写真:###

func sth[T everything_but_slices_or_arrays](arg T) { ...doSth... }

Solution

comparable# # を使用できます# スライスがこのインターフェイスを実装していないため、制約が半分に達しました: リーリー ただし、

配列

(同様の型) は次のとおりです: リーリー はコンパイルして実行され、出力が生成されます:

リーリー

したがって、関数内のスライスと配列を除外することの重要性に依存する可能性があり、それは汎用関数が何を行うかにも依存します。

より一般的なアプローチは、関数が必要なことを実行できるようにするために必要なスコープのみに汎用関数を制限することです。つまり、関数がジェネリック型と比較できる引数を必要とする場合、

comparable

制約は意味を持ちますが、関数が特定の機能を必要としない場合は、any## を受け入れさせます。 #。 関数の機能の観点からは問題がないとしても、特定の型の値を含む関数を恣意的に使用したくない場合は、次のようにすることができます。より適切に規制および取り締まるために、他の手段 (コードレビュー、プルリクエストなど) を通じて行われます。

汎用関数が何をしているのかを正確に知らなければ、判断するのは困難です。 :)

以上がGolang ジェネリクスはスライス型または配列型を除外しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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