Продвигаемые поля в составную структуру - PullRequest
0 голосов
/ 01 ноября 2019

Я играл с 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 или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...