如何指定我们要从结构中使用的字段?

时间:2018-11-23 14:25:33

标签: go struct field reflect

我有一个由多个相同类型字段组成的结构。

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 :(得分:0)

在您的情况下,我将使用map而不是struct,但是如果确实需要struct,则可以使用反射包。

v := reflect.ValueOf(x)

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