如何将不同的值从 map[string]interface{} 转换为类型字符串
How to convert different values from map[string]interface{} to type string
我在 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
}
}
@Adrian 和@Kaedys 评论指向正确答案。进一步开发它你可以做一些事情:
package main
import "fmt"
func main() {
map1 := map[string]interface{}{"str1": "string one", "int1": 123, "float1": 0.123}
var slc []string
for _, j := range map1 {
switch v := j.(type) {
case string:
slc = append(slc, v)
case fmt.Stringer:
slc = append(slc, v.String())
default:
slc = append(slc, fmt.Sprintf("%v", v))
}
}
fmt.Println(slc)
}
这个答案适用于字符串,任何实现 fmt.Stringer
interface 的类型,并且默认为 fmt.Sprintf("%v", ...)
。
我在 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
}
}
@Adrian 和@Kaedys 评论指向正确答案。进一步开发它你可以做一些事情:
package main
import "fmt"
func main() {
map1 := map[string]interface{}{"str1": "string one", "int1": 123, "float1": 0.123}
var slc []string
for _, j := range map1 {
switch v := j.(type) {
case string:
slc = append(slc, v)
case fmt.Stringer:
slc = append(slc, v.String())
default:
slc = append(slc, fmt.Sprintf("%v", v))
}
}
fmt.Println(slc)
}
这个答案适用于字符串,任何实现 fmt.Stringer
interface 的类型,并且默认为 fmt.Sprintf("%v", ...)
。