如何在 Go 中索引接口映射:解决“type interface {} 不支持索引”
在 Go 中,尝试索引具有特定键的接口{}映射可能会导致错误“类型接口{}不支持索引”。当尝试从映射中访问元素时会出现这种情况,其中值存储为接口,并且这些值的具体类型未知。
克服此错误的一种方法是显式对从使用您期望的值的切片类型进行映射。例如,考虑以下代码片段,其中名为 TopologyMap 的映射包含从字符串到对象数组的映射:
Map := make(map[string]interface{}) Map["Users"] = Users_Array Map["Hosts"] = Hosts_Array
要从此映射中检索元素,您可以使用以下语法,但它会导致“类型接口 {} 不支持索引”错误:
Map["Users"][0]
要解决此问题,请使用类型断言将接口值显式转换为其所需的类型。下面的示例演示了如何对字符串和主机切片的映射执行此操作:
import ( "fmt" ) type Host struct { Name string } func main() { Map := make(map[string]interface{}) Map["hosts"] = []Host{Host{"test.com"}, Host{"test2.com"}} hm := Map["hosts"].([]Host) fmt.Println(hm[0]) }
在此示例中,我们将存储在“hosts”键下的值显式类型转换为主机切片宿主对象,使得访问各个宿主元素成为可能。
通过使用这种方法,您可以有效地索引 interface{} 映射并检索您需要的特定值,即使它们的类型未知在编译时。
以上是如何在 Go 中索引到接口{}映射?的详细内容。更多信息请关注PHP中文网其他相关文章!