定义切片集合的常见行为
此查询寻求在切片集合之间建立一致行为的建议。考虑使用半开区间的示例。假设您有两种类型的此类间隔:
ClockInterval 和 period 切片在代码中经常遇到。当您需要找到给定时间的封闭区间时,就会出现挑战。这需要为两种类型编写 FindEnendingHalfOpenInterval 函数,从而导致重复代码。
提供的代码示例 (https://play.golang.org/p/Cy7fFaFzYJR) 演示了一种方法,涉及切片之间的类型转换。然而,它引发了关于是否有更有效的方法来定义多种切片类型的常见行为的问题。
转换切片
从以下位置转换切片的适当方法一种类型到另一种类型的方法是创建一个新切片并迭代元素,单独转换它们。为了更快地转换,您可以预先创建结果切片:
func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals { intervals := make(HalfOpenIntervals, 0, len(clockIntervals)) for _, clockInterval := range clockIntervals { intervals = append(intervals, clockInterval) } return intervals }
组合
或者,考虑使用组合来解决此问题。这涉及创建一个包含常见 FindEnlookingInterval 逻辑的基本结构。例如:
type HalfOpenIntervalBase struct { intervals []HalfOpenInterval } func (base *HalfOpenIntervalBase) FindEnclosingInterval(time Time) HalfOpenInterval { // Find and return the enclosing interval using base.intervals }
然后,您可以为嵌入此基本结构的 ClockInterval 和 period 创建单独的类型:
type ClockInterval struct { HalfOpenIntervalBase } type Period struct { HalfOpenIntervalBase }
使用这种方法,ClockInterval 和 period 都可以利用 FindEnwritingInterval 功能从基本结构中消除重复。
过度概括
需要注意的是,过度概括可能会适得其反。虽然追求避免代码重复的通用解决方案很诱人,但它并不总是 Go 中最实用的方法。为不同类型复制代码通常是必要的,并且最终可能会导致更干净、更易于维护的代码。
以上是我们如何定义 Go 中不同切片类型集合的共同行为?的详细内容。更多信息请关注PHP中文网其他相关文章!