2017-02-10 7 views
0

私は特定の構造体をidで検索し、属性を変更するために、スライスを繰り返し処理しようとしています。インターフェイスのスライスを移動します

type A struct { 
    ID ID 
    Steps []Step 
} 

type Step interface{} 

type B struct { 
    ID  ID 
} 

type C struct { 
    ID  ID 
} 

func (s *A) findStepByID(id ID) (Step, error) { 
    for index, step := range s.Steps { 
     switch stepType := step.(type) { 
     case A: 
      if stepType.ID == id { 
       return step, nil 
      } 
     case B: 
      if stepType.ID == id { 
       return step, nil 
      } 
     default: 
      return nil, errors.New("no step found") 
     } 
    } 
    return nil, errors.New("no step found") 
} 

私は例Bのための私の構造体を見つけたとき、私はあなたが明示的に型にキャストする必要が新しい値でIDを割り当てる.IF interface{}を返しfindStepByIDB.ID = xy

+2

ここには何が関係していますか? –

+1

何が問題なのですか? – I159

+0

それを行う方法私はステップがメソッドなしのインターフェイスであるというエラーを受け取ります – Fesco

答えて

1

機能を設定しますここで結果を更新し、更新value.Thereを使用することであるとして、あなたはケースを使用すると仮定し

は、あなたがそれを

    を行うことができます2つの方法がありそれはスコープの問題があるとして、私は二番目を示唆しています更新のみに

を行う代わりに、空のインターフェイスinterface{}は型スイッチを使用し

  • 定義関数UpdateID(ID)とのインターフェースを使用すると、スイッチ内の210

  • 関連する問題