如何将不同的值从map [string] interface {}转换为golang中的字符串?

时间:2018-03-19 15:17:01

标签: go types type-assertion

我在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
    }
}

1 个答案:

答案 0 :(得分:3)

@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", ...)