【发布时间】:2018-08-28 05:09:06
【问题描述】:
我在 interface{} 中有一张不同类型的地图,我需要将它们全部转换为字符串类型。类型断言是不够的。
package main
func main() {
map1 := map[string]interface{}{"str1": "string one", "int1": 123, "float1": 0.123}
var slc []string
for _, j := range map1 {
slc = append(slc, j.(string)) // panic: interface conversion: interface {} is int, not string
}
}
【问题讨论】:
-
你试过什么?你遇到了什么问题?
-
另一种至少适用于原始(即非结构)类型的替代方法是附加
fmt.Sprintf("%v", j)。这将通过它们的默认打印格式将它们全部转换为字符串。如果您想要特定类型的转换样式,请按照@Adrian 的建议使用类型开关。 -
实际上,我需要使用该地图中的属性创建 POST 请求。所以我需要获取字符串类型来创建带有该参数的请求。我认为 fmt.Sprintf("%v", j) 对我有用。
-
更好的方法是使用类型切换来检查使用类型断言的值,然后将所有内容转换为字符串。
标签: go types type-assertion