У меня есть функция, которая инициализирует массив структур из массива массива значений. Вот как я это делаю в данный момент:Функция рефакторирования для повторного использования между типами в Go
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
}
}
Это работает просто отлично, но теперь мне нужно инициализировать BarLists и BazLists, которые содержат Бары и Bazs. Вместо того, чтобы брызгать тот же фрагмент кода на протяжении моего кода, все выглядеть следующим образом:
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?
Угадайте, что я все еще привык к тому, что у вас нет дженериков. Резка и склеивание такого количества кода кажется неправильным, но похоже, что это подходящий способ сделать это. Благодаря! – Bill