首页 > 后端开发 > Golang > 我们如何定义 Go 中不同切片类型集合的共同行为?

我们如何定义 Go 中不同切片类型集合的共同行为?

Mary-Kate Olsen
发布: 2024-12-05 02:48:09
原创
836 人浏览过

How Can We Define Common Behavior for Collections of Different Slice Types in Go?

定义切片集合的常见行为

此查询寻求在切片集合之间建立一致行为的建议。考虑使用半开区间的示例。假设您有两种类型的此类间隔:

  • ClockInterval: 表示一天内的间隔,例如“从下午 1:00 之后开始。”
  • 期间: 表示没有明确结束时间的时间间隔,例如“从 7 月 9 日1810 我们宣布独立。”

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板