首页 > 解决方案 > 合并两个结构(相同类型)?

问题描述

我有点卡在这里。我想编写一个(通用的,如果可能的话!)函数,它将合并两个相同类型的结构——它可能不仅包含基元,还包含结构,甚至切片。

由于业务层面对我们的限制,我们不能真正使用mergo,所以我需要写这个。但是我很难得到任何值得谈论的结果——我不是在寻找一个完全有效的解决方案(如果你有代码,它肯定会有所帮助)但我真的需要一些关于这个算法可能是什么样子的指导。

我想我想做一些类似的事情:

func Merge(source CustomStruct, target CustomStruct) result CustomStruct{

    // Maybe some kind of son work to get my two structs to be strings?

    // Iterate the JSON, comparing each field and taking values from source and target (depending on rules), and add them to result...

    // recursion for when it contains another struct, or slice?

    // return result
}

标签: go

解决方案


使用产品将您的用例减少到可管理的类型数量,而不是尝试编写可以处理任何可以想象的类型的完全通用的东西。

然后选择以下之一:

  1. 使用将根据每种类型填充的模板生成代码(高性能),
  2. 带有类型断言的接口(良好的性能,编写起来有些乏味,但使用一个好的编辑器或在这里使用模板生成代码),或者
  3. 反射(性能差,复杂性更高,并且可能仍然很乏味)

如果您无法将其归结为可管理的类型数量,则仍然可以使用反射解决方案,但要复杂得多。如果您达到这一点,请查看能够处理任何类型的示例/灵感的标准库和流行的开源软件包,并注意可能需要大量的工作/时间/思想来完成和彻底测试。


推荐阅读