Я играл с Go и столкнулся с проблемой, связанной со структурой структуры.
Сценарий состоит в том, что у меня есть общая структура, которая может иметь один метод mapper.Each
. Вот код.
type m interface{
Each(string, interface{})
}
type mapper struct{}
func (m mapper) Each(f func(string, interface{})) {
var (
i int
n int
v reflect.Value
t reflect.Type
)
v = reflect.ValueOf(m)
t = v.Type()
n = v.NumField()
for i = 0; i < n; i++ {
var (
key = t.Field(i).Name
value = v.Field(i).Interface()
)
f(key, value)
}
}
Как видите, метод выполняет итерацию по всем ключам, найденным в структуре, и получает его значение в качестве интерфейса. Идея этой структуры состоит в том, чтобы позволить любой будущей структуре иметь общий метод для получения всех ключей, значения игнорируют тип (при условии, что структура удовлетворяет интерфейсу).
Когда я пытаюсь создать новую структуру, такую как type x struct{ mapper A string }
, и вызываю x.Each(...)
, вывод не производится. Я предполагаю, что определение mapper.Each
поддерживает только заботу о его собственных свойствах, в то время как x
может передавать их обратно в маппер (так сказать).
Какой механизм лучше всего справляется с этимкейс? Если все типы, такие как x
, выполняют вызов универсальной функции, такой как getAllProperties
или что-то еще.