ホームページ > バックエンド開発 > Golang > ジェネリックを使用せずに Go でマップ キーを取得する方法は?

ジェネリックを使用せずに Go でマップ キーを取得する方法は?

Patricia Arquette
リリース: 2024-12-07 17:19:12
オリジナル
457 人が閲覧しました

How to Retrieve Map Keys in Go Without Generics?

Go でマップ キーを取得する方法

Go では、型固有のパラメーターを持つ関数を使用してマップからキーを取得しようとすると、コンパイル時エラーが発生します。たとえば、マップ キーを取得するために設計された Keys() という名前の関数がある場合、次のエラー メッセージが表示されることがあります。m2 (type map[int]interface {}) を type map[interface {}]interface {} として使用できません。 Keys への引数。これは、Go が厳密に型指定された言語であり、int とinterface{} はデータ型が異なるため、マップ型の map[int]interface{} が map[interface{}]interface{} とは異なるために発生します。

Go にはジェネリックスの不在

一般に信じられていることに反して、Go はジェネリックスをサポートしていません。つまり、定義する機能がありません。明示的な型宣言なしでさまざまな型を操作できる関数またはデータ構造。この設計上の決定は、Go のシンプルさ、効率性、ランタイム エラーへの耐性に貢献します。

マップ キーを取得するためのソリューション

この問題に対処するには、いくつかのオプションがあります。

1.マップ タイプの変更

既存の Keys() 関数を維持したい場合は、マップ タイプを map[interface{}]interface{} に調整できます。これにより、関数が任意のタイプのキーを使用してマップ上で操作できるようになります。

2. Keys() 関数の編集

または、より具体的なマップ タイプ (この場合は、map[int]interface{}) を受け入れるように Keys() 関数を変更することもできます。

3.リフレクションの使用

パフォーマンス上の理由から推奨されませんが、リフレクト パッケージを利用してマップを操作し、リフレクションを通じてキーを取得できます。

サンプル コード

最初の 2 つを示すサンプル コード スニペットは次のとおりです。解決策:

汎用キータイプによるマップの使用:

package main

import "fmt"

func main() {
    m2 := map[interface{}]interface{}{
        2: "string",
        3: "int",
    }
    fmt.Println(Keys(m2))
}

func Keys(m map[interface{}]interface{}) []interface{} {
    // ... (code as before)
}
ログイン後にコピー

Keys() 関数の編集:

package main

import "fmt"

func main() {
    m2 := map[int]interface{}{
        2: "string",
        3: "int",
    }
    fmt.Println(Keys(m2))
}

func Keys(m map[int]interface{}) []int {
    // ... (code as before)
}
ログイン後にコピー

以上がジェネリックを使用せずに Go でマップ キーを取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート