我有一个函数,它从一个值数组的数组中初始化一个结构数组。这就是我目前的做法:
type Loadable interface {
Load([]interface{})
}
type FooList struct {
Foos []*Foo
}
func (fl *FooList) Load(vals []interface{}) {
fl.Foos = make([]*Foo, len(vals))
for i, v := range vals {
foo := &Foo{}
foo.Load(v.([]interface{}))
fl.Foos[i] = foo
}
}
这工作得很好,但现在我还需要初始化包含 Bars 和 Bazs 的 BarLists 和 BazLists。而不是在我的代码中散布相同的代码段,看起来像这样:
type BarList struct {
Bars []*Bar
}
func (fl *BarList) Load(vals []interface{}) {
fl.Bars = make([]*Bar, len(vals))
for i, v := range vals {
bar := &Bar{}
bar.Load(v.([]interface{}))
fl.Bars[i] = bar
}
}
重构此代码以使其更加干燥的正确方法是什么?