我的代码一般是这样的:转:类型切换声明中的这种多重情况条件有什么问题?
func BulkInsert(docs interface{}) {
switch data := docs.(type) {
case map[string] *model.SnapshotByConv, map[string] *model.UserSnapshotsMap:
for ver, _ := range data {
// other logics ...
}
case map[int64] map[string] *model.Delta:
for ver, _ := range data {
// other logics ...
}
}
}
然后当编译我得到了错误: cannot range over data (type interface {})
,它是由第一range
提高。
如果我删除了多种在第一种情况下,这意味着把它作为case map[string] *model.SnapshotByConv:
然后编译错误消失了,这是wried,我需要继续在这两种类型完全相同的逻辑,所以为什么我不能把它们放在同一个case
?
请帮助,谢谢。
我认为这里的情况与已经在这里得到的答案不一样:golang multiple case in type switch,它试图找到一种方法来识别类型,但这里是我只是不想识别某些类型,只是运行它的一些逻辑,我找不到一个优雅的方式来做到这一点。
可能重复[golang multiple case in type switch](http://stackoverflow.com/questions/40575033/golang-multiple-case-in-type-switch) –
@timCooper是的,那么我知道它不会像上面这样工作,但我的情况下优雅的解决方案是什么?我不需要确定这两种类型,只需要对数据进行排序。试图把代码放在'default'中,仍然编译错误。 – lnshi
如果你想让相同的代码对不同的类型进行操作,那通常意味着你应该定义一个接口来封装所需的功能,然后为这些类型实现该接口。 –