首頁 >後端開發 >Golang >我們如何定義 Go 中不同切片類型集合的共同行為?

我們如何定義 Go 中不同切片類型集合的共同行為?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-05 02:48:09808瀏覽

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

定義切片集合的常見行為

此查詢尋求在切片集合之間建立一致行為的建議。考慮使用半開區間的範例。假設您有兩種類型的此類間隔:

  • ClockInterval: 表示一天內的間隔,例如「從下午1:00 之後開始。」
  • 期間: 表示沒有明確結束時間的時間間隔,例如「從7 月9 日1810我們宣布獨立。當您需要找到給定時間的封閉區間時,就會出現挑戰。這需要為兩種類型編寫 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 邏輯的基本結構。例如:

然後,您可以為嵌入此基本結構的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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn