【发布时间】:2018-11-18 16:34:55
【问题描述】:
我有两个不同的结构,如下所述 A abd B 和两个进程函数。有什么方法可以让我编写一个通用函数来为struct 生成map[string]struct。此外,在给定结构名称的情况下,有什么方法可以使用反射来创建相同的对象?
type A struct {
name string
// more fields
}
type B struct {
name string
// more fields
}
func ProcessA(input []A) map[string]A {
output := make(map[string]A)
for _, v := range input {
output[v.name] = v
}
return output
}
func ProcessB(input []B) map[string]B {
output := make(map[string]B)
for _, v := range input {
output[v.name] = v
}
return output
}
【问题讨论】:
-
谁能解释下投票的原因?
-
假设没有特定 cmets 的原因是 downvote 按钮的工具提示。至于问题,no Go 没有泛型,类型是不变的。是的,您可以使用反射;你试过了吗?
-
“此外,有没有什么方法使用反射给定结构名称我可以创建相同的对象?” 如果你的名字是一个字符串值,那么没有,而不仅仅是名字。您还需要一个字段列表及其类型,我也相信包名称,您仍然必须访问实际类型才能最终转换结果。
-
@JimB 是的,我确实尝试过使用界面来实现相同的目标。但后来我意识到由于
https://stackoverflow.com/questions/12994679/golang-slice-of-struct-slice-of-interface-it-implements,它无法使用接口完成。那么,有什么方法可以通过使用反射来完成。而且,我还是不明白投反对票的原因。 -
@Naresh:downvote 按钮显示“这个问题没有显示任何研究工作”,并且这个问题已经被多次询问了数十次。当然,这对于反射来说是微不足道的,但在实践中这很少是一个问题,因为将简单的 for 循环内联放在几个地方比反射要清晰得多。
标签: go struct reflection