这里的关键问题是您需要将切片从一种类型转换为另一种类型。
转换切片正确的方法是创建一个新的切片并在其上循环以转换每个项目。如果您事先创建了数组,则可以更快地执行此 *** 作:
组成func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals { intervals := make(HalfOpenIntervals, 0, len(clockIntervals)) for _, clockInterval := range clockIntervals { intervals = append(intervals, clockInterval) } return intervals}
除了这种组合之外,您还可以解决
GetEnclosingInterval只编写一次函数的问题。我并不是说它更好:它还有其他优点和缺点。合适的方法取决于您在此处发布的内容之外还使用切片的方式。
这是我的重构建议(并已修正):https :
//play.golang.org/p/Ko43hJUMpyT(TehSṕhinX,您忘了使用而不是(或名称是)来创建
可变方法 )
baseIntervals.add``pointer recievers``value recievers``non-pointerrecievers
将
HalfOpenIntervals不存在了。取而代之的是,您有两种不同的类型
CLockIntervals,
PeriodIntervals并且都具有
GetEnclosingInterval通过通用基本结构实现的排序和功能。
为了方便起见,我为每个函数添加了
Add一个
New...函数。这就是缺点所在:由于
CLockIntervals(和
PeriodIntervals)不再是一个切片,而是一个结构,您将需要方便的功能来从外部处理内部切片。
-编辑-
过度概括我自己来自面向对象的背景,我知道不惜一切代价避免重复代码的动力。
现在,我已经全职编写了2年多的Go代码,我了解到,这并不总是go中最好的方法。这些天来,在不同类型的go中复制代码是我常做的事情。不过,不确定是否所有人都同意这一说法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)