Как указать поле, которое мы хотим использовать из структуры?

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

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 ответ

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

v := reflect.ValueOf(x)

for i := 0; i < v.NumField(); i++ {
    fmt.Printf("%v", v.Field(i).Interface())
}
Другие вопросы по тегам