我有点卡在这里。我想编写一个(泛型,如果可能的话!)函数,该函数将合并两个相同类型的结构-它可能不仅包含基元,而且还包含结构,甚至是切片。
由于在业务级别上受到的限制,我们不能真正使用mergo,因此我需要编写此代码。但是我很难获得值得讨论的任何结果-我不是在寻找一个完全有效的解决方案(如果您有代码,那肯定会有所帮助),但我确实需要有关此算法的外观的一些指导。
我想我想做些类似have的事情:
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
}
答案 0 :(得分:1)
与产品一起使用,以将用例减少到可管理的类型数量,而不是尝试编写完全通用的东西来处理任何可以想象的类型。
然后选择以下选项之一:
如果您不能将其归结为可管理的类型数量,则仍然可以通过反射来解决,但要复杂得多。如果达到这一点,请查看能够处理任何类型的示例/灵感的标准库和流行的开源软件包,并意识到可能需要大量的工作/时间/思想来完成和彻底地测试。 / p>
答案 1 :(得分:0)
我想这里有一个关于性能的重要问题。如果性能很重要,我几乎可以保证序列化/反序列化为字符串表示不是您想要的方式。
总的来说,我会断言您想重新做些什么:使其通用化并不是Go的精神。如果您需要“合并”两个结构(本身没有一个明确的目标,没有更多具体的示例),我认为您可能应该自己编写带有明确逻辑的函数,以了解将哪些字段复制到何处。