2017-01-15 20 views
0

タイプスイッチでフォールスルーを使用できないため、このコードで2つのケースをマージする方法はありますか?タイプスイッチで重複コードを削除する

switch v := moduleSource.(type) { 
      case Driver: 
       dec.Decode(&v) 
       _, _ = ormInstance.Insert(&v) 

      case Metric: 
       dec.Decode(&v) 
       _, _ = ormInstance.Insert(&v) 

      default: 
        fmt.Println("unknown type") 
    } 

ORMコールormInstance.Insert()には正しい構造が必要です。

+0

ちょうど '場合ドライバー、メトリック: - :私が持っている' –

+0

それはコンパイルが、動作しませんが、その – kambi

答えて

0

タイプリストは、Go specで定義されているタイプスイッチで使用できます。

switch v := moduleSource.(type) { 
    case *Driver, *Metric: 
     // v has the same type as moduleSource 
     dec.Decode(v) 
     _, _ = ormInstance.Insert(v) 

    default: 
     fmt.Println("unknown type") 
} 
+0

私はvはキャストされていないことをやる(ModuleSourceのまま) – kambi

+0

@kambiをすれば、vは不明です私の答えを更新して、 'v'のアドレスを削除しました。 –

+0

まだormはポインタが必要だと叫んでいます – kambi