在go中合并两个结构(相同类型)?
我被困在这里了。我想写一个(通用的,如果可能的话!)函数,它将合并两个相同类型的结构——它可能不仅包含原语,还包含结构,甚至切片 由于业务层面的限制,我们无法真正使用mergo,因此我需要写下这篇文章。但是我在获得任何值得讨论的结果时遇到了一些困难——我不是在寻找一个完全有效的解决方案(如果你有代码,它肯定会有帮助),但我确实需要一些关于这个算法的指导 我会想象我想做一些事情,比如:在go中合并两个结构(相同类型)?,go,Go,我被困在这里了。我想写一个(通用的,如果可能的话!)函数,它将合并两个相同类型的结构——它可能不仅包含原语,还包含结构,甚至切片 由于业务层面的限制,我们无法真正使用mergo,因此我需要写下这篇文章。但是我在获得任何值得讨论的结果时遇到了一些困难——我不是在寻找一个完全有效的解决方案(如果你有代码,它肯定会有帮助),但我确实需要一些关于这个算法的指导 我会想象我想做一些事情,比如: func Merge(source CustomStruct, target CustomStruct) res
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
}
我想这里有一个关于性能的重要问题。如果性能很重要,我几乎可以保证序列化/反序列化到字符串表示不是您想要的方式
总的来说,我认为你想要重新定义的是:使其通用化并不符合围棋的精神。如果您需要“合并”两个结构(这本身是一个不明确的目标,没有更具体的示例),我认为您可能应该自己编写这个函数,并使用明确的逻辑来说明哪些字段被复制到哪里 使用产品,将您的用例减少到可管理的类型数量,而不是试图编写一些完全通用的、可以处理任何可想象类型的东西 然后选择以下选项之一:
如果您不能将其归结为可管理的类型数,那么仍然可以使用反射解决方案,但要复杂得多。如果您达到了这一点,请查看标准库和流行的开放源码软件包,这些软件包能够处理任何类型的示例/灵感,并意识到完成和彻底测试可能需要大量的工作/时间/思考。我希望您有更多的示例可供使用。但是我认为你需要结构合成,或者只是重复结构。代码重复并不像OOP语言让您相信的那样糟糕。