Go 戈朗接口公司;铸造

Go 戈朗接口公司;铸造,go,Go,我有以下代码: func returnTheMap() map[string][]string{ myThing := getSomeValue() } getSomeValue()返回类型为map[string]interface{} 但它在内部始终是一个映射[string][]字符串 将myThing设置为与getSomeValue()相同但类型为map[string][]string的对象的最佳方法是什么 我可以这样制作一个新对象: newMap := ma

我有以下代码:

   func returnTheMap() map[string][]string{
        myThing := getSomeValue()
    }
getSomeValue()
返回类型为
map[string]interface{}

但它在内部始终是一个
映射[string][]字符串

myThing
设置为与
getSomeValue()
相同但类型为
map[string][]string
的对象的最佳方法是什么

我可以这样制作一个新对象:

newMap := make(map[string][]string)

// cardTypeList is of type map[string]interface {}, must convert to map[string][]string
for k, v := range myThing {
    newMap[k] = v.([]string)
}
但是有什么方法可以做到这一点,或者有什么更好的方法可以做到这一点吗?

根据,您不能直接更改切片的类型

因此,您的解决方案似乎是首选方法。

根据,您不能直接更改切片的类型

因此,您的解决方案似乎是首选方法。

getSomeValue()
您的函数吗?如果是这样,我会将返回类型更改为
map[string][]string
而不是
map[string][]interface

如果不是这样的话,我会创建一些助手来查看和检查,以确保类型设置符合您的需要。我在操场上有一个例子

getSomeValue()
您的函数吗?如果是这样,我会将返回类型更改为
map[string][]string
而不是
map[string][]interface

如果不是这样的话,我会创建一些助手来查看和检查,以确保类型设置符合您的需要。我在操场上有一个例子


这是正确的。更改切片的类型是一个O(n)操作,Golang开发人员不希望O(n)类型转换看起来像其他类型转换(O(1))。为了让它们强制执行,您必须显式地循环内容并单独键入assert,以便在代码中明确操作不是常数时间。这是正确的。更改切片的类型是一个O(n)操作,Golang开发人员不希望O(n)类型转换看起来像其他类型转换(O(1))。为了让它们强制执行,您必须显式地循环内容并单独键入assert,以便在代码中明确操作不是常数时间。