2017-02-10 101 views
0

我想迭代一個接口片來找到我的特定結構的id並更改屬性。Go lang界面

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結構,然後我將設置B.ID = xy

+2

這裏有什麼問題? –

+1

問題是什麼? – I159

+0

如何做到這一點,我得到的錯誤,步驟是一個沒有方法的接口 – Fesco

回答

1

。如果你想與你必須明確地將它轉換爲一種新的價值分配ID findStepByID返回interface{}功能

這裏假設你使用的情況下,是更新的結果,並使用更新value.There兩種方式你可能做到這一點

  1. 而不是一個空接口interface{}的使用接口定義

  2. 使用類型切換功能UpdateID(ID)和內部交換機僅做更新

我不會建議第二個,因爲它有範圍的問題