同様の方法でスライスとチャネルの値を検索する汎用関数を golang で作成しようとしています。以下に例を示します:
リーリー しかし、次のコンパイル エラーが発生します: cannot range over input (Variable of type t is binding by chan int|[]int) (t has no core type)
。
次のような汎用インターフェイスを作成しようとします:
リーリーただし、エラーは cannot range over input (varable of type t subject to rangeable) (t has no core type) に変更されました
基本的には同じままです...
ジェネリックまたはチャネルを使用してこのタスクを解決する方法はありますか?スライスを同じコア タイプに「変換」することはできません。
ご提案やアイデアをありがとうございます!
それはできません。
range
式は コア タイプで始まる必要があります。異なる型の項を持つ共用体には、共通の基礎となる型がないため、コア型がありません。
range にコア タイプが必要な理由も直感的にわかります。スライス範囲とチャネル範囲のセマンティクスが異なります。
i は
int 型のインデックスであり、
item はスライス要素の型です。
リーリー
item は chan 要素のタイプであり、これが唯一の可能なスコープ変数です。
リーリー
しかし、繰り返しになりますが、この関数の動作 (ブロッキングか非ブロッキングか) は型によって異なり、ここでジェネリックを使用することでどのような利点が得られるかは明らかではありません。以上がチャネルとスライスを受け入れる汎用関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。