dongquanlin1885 2018-03-19 15:17
浏览 499
已采纳

如何将map [string] interface {}中的不同值转换为golang中的string类型?

I have a map with different types in interface{} and I need to convert them all to string type. Type assertion is not enough.

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条回答 默认 最新

  • dongmi5177 2018-03-19 15:31
    关注

    @Adrian and @Kaedys comments point to the correct answer. Developing it a bit more you could do something as:

    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)
    }
    

    This answer will work for strings, any type that implements the fmt.Stringer interface, and will default to fmt.Sprintf("%v", ...).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化