我有一个结构
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。
答案 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]
在这里使用两种类型来控制使用哪些键的理由是什么?