値の配列の配列から構造体の配列を初期化する関数があります。これは私が現在やっている方法です:
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
}
}
これは問題なく機能しますが、今度は、Bar と Baz を含む BarList と BazList も初期化する必要があります。コード全体に同じスニペットを振りかける代わりに、次のようになります。
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
}
}
このコードをリファクタリングしてより DRY にする正しい方法は何ですか?