【发布时间】:2018-11-23 14:25:32
【问题描述】:
我有一个由多个相同类型的字段组成的结构。
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 次,只是为了改变一行。 我尝试了反射包。我认为这样做很危险。
【问题讨论】:
-
您确定应该将该信息存储为结构字段吗?也许地图会更合适。
-
@TimCooper 实际上我正在使用类似 map[email]test 的东西,所以测试包含与该电子邮件相关的信息,实际上我有超过 3 个字段为每个字段制作一张地图有点太多了,而且我认为不实用
-
如果您不想使用反射,您可以使函数可变参数获取指向字段的指针。例如
something(&t.A, &t.B, &t.C)