我正在从 JSON 读取数据结构。有一些转换正在进行,最后我有一个struct字段,其中一个是 type interface{}。它实际上是一张地图,所以 JSON 将它放在一个map[string]inteface{}.
我实际上知道底层结构是map[string]float64并且我想这样使用它,所以我尝试做一个断言。以下代码重现了该行为:
type T interface{}
func jsonMap() T {
result := map[string]interface{}{
"test": 1.2,
}
return T(result)
}
func main() {
res := jsonMap()
myMap := res.(map[string]float64)
fmt.Println(myMap)
}
我收到错误:
panic: interface conversion: main.T is map[string]interface {}, not map[string]float64
我可以执行以下操作:
func main() {
// A first assertion
res := jsonMap().(map[string]interface{})
myMap := map[string]float64{
"test": res["test"].(float64), // A second assertion
}
fmt.Println(myMap)
}
这工作正常,但我发现它非常难看,因为我需要重建整个地图并使用两个断言。有没有正确的方法来强制第一个断言放弃interface{}并使用float64?换句话说,做原始断言的正确方法是什么.(map[string]float64)?
潇湘沐
相关分类