【发布时间】:2017-12-18 16:26:16
【问题描述】:
我有 3 个切片(foos、bars、bazs),每个切片都填充了不同类型的结构。为了删除一些样板代码,我想创建一个通用的 remove(slice, struct) slice 函数。类似于标准中提供的 append() 的对立面。
没有一个结构是指针,所以没有必要将它们归零。我曾想过使用 interface{} 来获得所需的结果,但无济于事。当前的实现使用一个类型开关,然后有一个接近复制粘贴的 remove()(下面的游乐场链接中的示例)从切片中删除。随着我继续扩展该项目,它将发展为更多样板。
正在尝试的示例: https://play.golang.org/p/9UPRIIp5M2
Function input: []slices, struct
Expected output:
Modified (removed struct) []slices if struct is found
Or, Unmodified []slices if it isn't.
如果它简单易行。我想象它已经存在于标准中。但是,从经验丰富的专业人士那里获得关于我正在尝试做的事情是否可行的建议永远不会有什么坏处。
感谢您的宝贵时间。
【问题讨论】:
-
您需要为此使用反射。它不会是类型安全的并且会更慢。
-
可能吗?是的。好主意?几乎可以肯定不会,原因已经提到:它会很慢。
-
看起来我会熟悉反射,这样我就可以运行一些效率基准。运行基准测试后,我可能会选择退出并返回样板版本。感谢您的反馈。
-
您需要对这些切片进行索引还是只是追加、删除、迭代?如果您不需要随机访问,您可能需要考虑不同的数据结构,例如链表(例如,golang.org/pkg/container/list)。