gpt4 book ai didi

Go - 解决接口(interface) slice 问题的惯用方法

转载 作者:IT王子 更新时间:2023-10-29 00:40:41 25 4
gpt4 key购买 nike

我有一个 WorkDay 结构保存有关某人工作时间的数据,一个 WorkWeek 结构保存一堆 WorkDays,一个 WorkMonth 结构保存一堆 WorkWeeks。我们的想法是让每个人返回那段时间的总工作时间。

type WorkDay struct {
StartTime time.Time
EndTime time.Time
}

type WorkWeek struct {
WorkDays []WorkDay
}

type WorkMonth struct {
WorkWeeks []WorkWeek
}

func (w WorkDay) HoursWorked() time.Duration {
// Find hours worked through simple subtraction.
}

func (w WorkWeek) HoursWorked() time.Duration {
var totalHours time.Duration
for _, day := range w.WorkDays {
totalHours += day.HoursWorked()
}
return totalHours
}

func (w WorkMonth) HoursWorked() time.Duration {
var totalHours time.Duration
for _, week := range w.WorkWeeks {
totalHours += week.HoursWorked()
}
return totalHours
}

这段代码工作得很好,但是 WorkWeek.HoursWorked()WorkMonth.HoursWorked() 中的重复确实让我很吃力。我尝试执行以下操作,认为我很聪明:

func (w WorkWeek) HoursWorked() time.Duration {
return sumHoursWorked(w.WorkDays)
}

func (m WorkMonth) HoursWorked() time.Duration {
return sumHoursWorked(m.WorkWeeks)
}

type countable interface {
HoursWorked() time.Duration
}

func sumHoursWorked(timeFrames []countable) time.Duration {
var totalHours time.Duration
for _, frame := range timeFrames {
totalHours += frame.HoursWorked()
}
return totalHours
}

但是,正如解释的here ,即使 WorkDay 实现了 countable,一片 WorkDay 也不算作一片 countable

那么,是否有一些巧妙的、惯用的方法可以解决我所缺少的这种情况,或者我只是坚持重复?

最佳答案

没有。要么有一段 countables 给你动态方法分派(dispatch)或一些编程(你的第一个解决方案)或重组你的类型。我不知道您的问题域,但由数周和数天组成的月份似乎很奇怪,至少是月/周的东西。

关于Go - 解决接口(interface) slice 问题的惯用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23804213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com