ホームページ > バックエンド開発 > Golang > Go で「map[string]interface{}」にアクセスすると、「type Interface {} はインデックス作成をサポートしていません」というエラーが発生するのはなぜですか?

Go で「map[string]interface{}」にアクセスすると、「type Interface {} はインデックス作成をサポートしていません」というエラーが発生するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-07 12:29:13
オリジナル
614 人が閲覧しました

Why Does Accessing `map[string]interface{}` in Go Result in a

構文エラー: インターフェイス タイプのインデックス アクセスが拒否されました

Go でタイプ map[string]interface{} のマップを操作する場合、インデックス表記を使用して値にアクセスすると、「型インターフェイス {} はインデックス付けをサポートしていません」というイライラする結果が生じる理由を理解することが重要です。エラー。

根本原因: Go の Interface{}

Interface{} は型システムのカメレオンとして機能し、異なる型のオブジェクトを単一のシステム内に保持できるようにします。変数または関数を介して渡されます。ただし、柔軟性には代償が伴います。interface{} では特定のメソッドやプロパティが定義されていないため、インデックス作成などのアクションをインターフェイス上で直接実行することができません。

問題の解決方法

このインデックス作成の問題を解決するには、interface{} 値を適切な型に明示的にキャストする必要があります。{} Go は、このプロセスを容易にするために、いくつかの型キャスト演算子を提供します。例を詳しく見てみましょう:

package main

import (
    "fmt"
)

type Host struct {
    Name string
}

func main() {
    Map := make(map[string]interface{})
    Map["hosts"] = []Host{Host{"test.com"}, Host{"test2.com"}}

    // Type cast the interface{} to a slice of Host
    hm := Map["hosts"].([]Host)
    fmt.Println(hm[0])
}
ログイン後にコピー

この例では、「Map」という名前のマップ[文字列]インターフェース{}があり、「」に関連付けられた値としてホスト オブジェクトのスライスが保存されています。ホスト」キー。このスライスから要素にアクセスするには、Map["hosts"] に格納されているインターフェース値を Host.

Playground Link

のスライスに型キャストします。{}このコードを試して結果を直接確認するには、次のリンクに移動してください: [Playgroundリンク](https://go.dev/play/p/dJrycL1QD0C)

以上がGo で「map[string]interface{}」にアクセスすると、「type Interface {} はインデックス作成をサポートしていません」というエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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