使用迭代将接口{}转换为映射
在您的代码中,尝试将接口{}转换为映射时遇到错误。要解决此问题并启用地图元素迭代,请按照以下步骤操作:
使用断言:
将基于反射的方法替换为直接类型断言,如中所示下面的代码:
func process(in interface{}, isSlice bool, isMap bool) { if isMap { v := in.(map[string]*Book) fmt.Printf("Type: %v\n", v) for _, s := range v { fmt.Printf("Value: %v\n", s) } } }
此断言将 interface{} 值分配给类型为 map[string]*Book if 的变量条件满足。这种方法效率更高,并且不需要反射。
或者,您可以使用 switch 语句来处理不同类型的输入,而不使用反射。
使用带有反射的自定义映射键 (可选):
如果仍然需要使用反射,可以使用 Value.MapKeys 检索映射键,而不是直接迭代超过价值。有关此方法的详细信息,请参阅提供的解决方案中提到的 Stack Overflow 答案。
以上是从接口{}转换后如何安全地迭代map[string]*Book?的详细内容。更多信息请关注PHP中文网其他相关文章!