ホームページ >バックエンド開発 >Golang >型 V の 2 つの値を Go ジェネリックで比較しようとすると機能しません

型 V の 2 つの値を Go ジェネリックで比較しようとすると機能しません

WBOY
WBOY転載
2024-02-09 12:39:09555ブラウズ

尝试比较 V 类型的两个值与 Go 泛型不起作用

php 編集者 Apple は、Go 言語ではジェネリックスを使用する場合、型 V の 2 つの値を直接比較できないことを発見しました。これは、文字列や整数の場合のように == または != を使用して単純に比較を行うことはできないことを意味します。これは、ジェネリックの実装方法が異なり、値を直接比較できないためです。この場合、必要な機能を実現するには、カスタムの比較関数またはメソッドを使用して比較操作を実行する必要があります。これは、特にジェネリックスを含むコードを作成する場合に注意すべき点です。

質問内容

goバージョン:go1.21rc2

私は値を受け取り、その値がマップ内にある場合に true/false を返すジェネリックスを使用して go で関数を作成しています。

以下のバージョン 1 では、タイプが any のときに 2 つの値を比較できない理由がわかりません。しかし、バージョン 2 で any に変換した後は、機能するようになりました...明らかな何かが欠けていると思いますが、それがよくわかりません。

バージョン 1 (動作しません):

リーリー

バージョン 2 (作業中):

func invalues[m ~map[k]v, k comparable, v any](m m, v v) bool {
    for _, x := range maps.values(m) {
        if x == v {
            return true
        }
    }
    return false
}

Solution

V== を許可する comparable である必要があります。
any に変換すると、常に許可される any の間で非汎用 == が使用されるため、効率的に比較できます。

以上が型 V の 2 つの値を Go ジェネリックで比較しようとすると機能しませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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