我试图遍历一片接口,通过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
时,我会设置B.ID = xy
答案 0 :(得分:1)
函数findStepByID
返回interface{}
。如果要为ID分配新值,则必须将其显式转换为类型
这里假设您使用案例来更新结果并使用更新的值。有两种方法可以做到这一点
而不是空接口interface{}
使用定义了函数UpdateID(ID)
的接口
使用类型开关和内部开关仅执行更新
我不会建议第二个,因为它有范围问题