go - 合并两个结构(相同类型)?
问题描述
我有点卡在这里。我想编写一个(通用的,如果可能的话!)函数,它将合并两个相同类型的结构——它可能不仅包含基元,还包含结构,甚至切片。
由于业务层面对我们的限制,我们不能真正使用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
}
解决方案
使用产品将您的用例减少到可管理的类型数量,而不是尝试编写可以处理任何可以想象的类型的完全通用的东西。
然后选择以下之一:
- 使用将根据每种类型填充的模板生成代码(高性能),
- 带有类型断言的接口(良好的性能,编写起来有些乏味,但使用一个好的编辑器或在这里使用模板生成代码),或者
- 反射(性能差,复杂性更高,并且可能仍然很乏味)
如果您无法将其归结为可管理的类型数量,则仍然可以使用反射解决方案,但要复杂得多。如果您达到这一点,请查看能够处理任何类型的示例/灵感的标准库和流行的开源软件包,并注意可能需要大量的工作/时间/思想来完成和彻底测试。
推荐阅读
- reactjs - 使用 render() 返回编写单元测试
- apache-spark - Spark 1.6 - df.write.save() 和 df.write.parquet() 有什么区别
- sql - 如何选择至少一个 json 元素与某些条件匹配的 postgres 行?
- html - 颠倒图像问题 - 需要解决方案
- sql - 如果“from”子句不匹配任何结果,如何编写空表?
- excel - Excel VBA 矩阵错误 1004
- c# - 检测 Windows 应用商店是否可用
- sql-server - SSIS 从 2008R2 升级到 2017 - 连接到 OLEDB 数据源时脚本任务失败
- android - manifests 使用版本控制后充满错误
- regex - 使用 sed 仅从字符串中提取数字