構文エラー: インターフェイス タイプのインデックス アクセスが拒否されました
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 サイトの他の関連記事を参照してください。