Как указать поле, которое мы хотим использовать из структуры? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть структура, состоящая из нескольких полей одного и того же типа.

type test struct{
       A int
       B int
       C int
}

Я хочу применить функцию, которая делает то же самое для трех полей, но я хочу делать это только по одному каждый раз.

function something (toto test, cond int) {
    if (cond == 1){
        // then we will use A for the rest of the function
    }else if (cond == 2) {
        // then we use B etc....
    } ... 

    for mail, v := range bdd {
        if _, ok := someMap[v.A]; !ok {       // use v.A or V.B or V.C     
            delete(bdd, mail)
        }
        ...
    }

    ...
}

Функция действительно длинная, и меня беспокоит дублирование кода, как 3 раза, только для одной изменяющейся строки.Я пробовал вещи с пакетом отражения.Я думаю, что это опасная идея.

1 Ответ

0 голосов
/ 23 ноября 2018

В вашей ситуации я бы использовал map вместо struct, но если struct действительно требуется, вы можете использовать отражающий пакет.

v := reflect.ValueOf(x)

for i := 0; i < v.NumField(); i++ {
    fmt.Printf("%v", v.Field(i).Interface())
}
...