我的代碼一般是這樣的:轉:類型切換聲明中的這種多重情況條件有什麼問題?
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
如果你想讓相同的代碼對不同的類型進行操作,那通常意味着你應該定義一個接口來封裝所需的功能,然後爲這些類型實現該接口。 –