【问题标题】:how to append string to the map of string to interface type如何将字符串附加到字符串映射到接口类型
【发布时间】:2021-09-06 20:20:48
【问题描述】:

我创建了一个字符串到接口{}的映射

x := make(map[string]interface{})  

最终我需要以下输出

x["key1"] = ["value1","value2","value3", ......]

谁能帮忙,如何将字符串值附加到这张地图?

【问题讨论】:

    标签: dictionary go slice


    【解决方案1】:

    您只能附加到切片,不能附加到地图。

    要添加您列出的值,请使用:

    x["key"] = []string{"value1","value2","value3"}
    fmt.Println(x)
    

    如果"key"已经存在,你可以使用type assertion追加:

    x["key"] = append(x["key"].([]string), "value4", "value5")
    fmt.Println(x)
    

    输出(试试Go Playground上的例子):

    map[key:[value1 value2 value3]]
    map[key:[value1 value2 value3 value4 value5]]
    

    注意:您必须重新分配新切片(由append() 返回)。

    还要注意,如果"key" 还没有在地图中或者不是[]string 类型,那么上面的代码将会出现panic。为了防止这种恐慌,只有当值存在并且类型为[]string时才追加:

    if s, ok := x["key"].([]string); ok {
        x["key"] = append(s, "value4", "value5")
    } else {
        // Either missing or not []string
        x["key"] = []string{"value4", "value5"}
    }
    

    Go Playground 上试试这个。

    【讨论】:

    • panic:接口转换:interface {} 是 nil,不是 []string [恢复] 恐慌:接口转换:interface {} 是 nil,不是 []string
    • @AbhishekDK 是的,请阅读解释并处理它的答案的后半部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2016-03-20
    • 2021-06-19
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多