定義切片集合的常見行為
此查詢尋求在切片集合之間建立一致行為的建議。考慮使用半開區間的範例。假設您有兩種類型的此類間隔:
轉換切片
從以下位置轉換切片的適當方法一種類型到另一種類型的方法是創建一個新切片並迭代元素,單獨轉換它們。為了更快轉換,您可以預先建立結果切片:
組合func ToIntervalsFromClockIntervals(clockIntervals []ClockInterval) HalfOpenIntervals { intervals := make(HalfOpenIntervals, 0, len(clockIntervals)) for _, clockInterval := range clockIntervals { intervals = append(intervals, clockInterval) } return intervals }
或者,考慮使用組合來解決此問題。這涉及創建一個包含常見 FindEnlookingInterval 邏輯的基本結構。例如:
然後,您可以為嵌入此基本結構的ClockInterval 和period 建立單獨的類型:
type HalfOpenIntervalBase struct { intervals []HalfOpenInterval } func (base *HalfOpenIntervalBase) FindEnclosingInterval(time Time) HalfOpenInterval { // Find and return the enclosing interval using base.intervals }
使用此方法,ClockInterval 和period 都可以利用FindEnwritingInterval功能從基本結構中消除重複。
type ClockInterval struct { HalfOpenIntervalBase } type Period struct { HalfOpenIntervalBase }
過度概括
需要注意的是,過度概括可能會適得其反。雖然追求避免程式碼重複的通用解決方案很誘人,但它並不總是 Go 中最實用的方法。為不同類型複製程式碼通常是必要的,並且最終可能會導致更乾淨、更易於維護的程式碼。
以上是我們如何定義 Go 中不同切片類型集合的共同行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!