Golang:类型转换 - 将map [string]字符串转换为map [someStruct]字符串

时间:2017-10-21 08:50:53

标签: dictionary go casting

我有一个结构

type mapKey string

var key1 mapKey = "someKey"
var key2 mapKey = "anotherKey"

type SampleMap map[mapKey]string

传入的http调用必须是map [string] string

我需要进行类型转换     业务逻辑中的SampleMap

正常转换:Sample(请求)给出错误,无法将类型map [string]字符串转换为SampleMap。 由于这两者都具有相同的内部类型,为什么会出现此错误以及解决方法是什么?

我真的不想写一个函数来将每个字符串映射到mapKey然后构造SampleMap。

1 个答案:

答案 0 :(得分:2)

没有快捷方式可以将地图或数组从一种类型强制转换为另一种类型,因为有各种类型(例如mapKey(“str”))。

设置键并不难,你可以只有一个for循环:

params := map[string]string{"someKey": "bar"}

// Copy to type SampleMap
for k, v := range params {
        m[mapKey(k)] = v
}

除了通过使用访问器以某种方式强制执行限制(不允许直接访问)之外,有两个额外类型(对于键和映射)没有多大意义。这感觉就像从另一种语言翻译的代码?

在没有其他细节的情况下,我会这样做:

// These are the recognised key types for params
const (
  key1 = "someKey"
  key2 = "anotherKey"
)

// Work with this sort of map till you come to convert values:
// When checking keys or using them, use the constants above.
params map[string]string
myVal := params[key1]

在这里使用两种类型来控制使用哪些键的理由是什么?