首頁  >  文章  >  後端開發  >  如何在 Go 中使用泛型方法參數來使 Count 函數適用於任何具有 ID 屬性的類型?

如何在 Go 中使用泛型方法參數來使 Count 函數適用於任何具有 ID 屬性的類型?

Barbara Streisand
Barbara Streisand原創
2024-11-01 15:01:02915瀏覽

How can I use generic method parameters in Go to make a Count function work with any type that has an ID property?

在Go 中使用泛型方法參數

Go 泛型在定義可處理各種資料類型的方法和資料結構方面提供了靈活性。在此特定實例中,目前的任務是修改 Count 函數以接受擁有 ID 屬性的任何類型。

基於介面的解決方案

基於介面解決方案允許將行為與具體類型分開。透過利用接口,我們可以抽象化不同資料類型之間的共同特徵。

<code class="go">type IDed interface {
  GetID() int
}</code>

這個介面定義了一個方法 GetID,它會傳回一個整數。不同的類型可以實現這個接口,允許 Count 函數與任何滿足該接口的類型一起工作。

ImplStruct 實作

為了實現這個,我們定義了第二個類型,ImplStruct,嵌入IDed介面。此類型包括一個 GetID 方法和一個附加的名稱欄位。

<code class="go">type ImplStruct struct {
  IDed
  Name string
}</code>

修改的計數函數

Count 函數現在可以接受任何實作 IDed 介面的類型,這意味著它可以用於哺乳動物和人類類型。

<code class="go">func Count(data []IDed) []string {
  ids := make([]string, len(data))
  for i, m := range data {
    ids[i] = strconv.Itoa(m.GetID())
  }
  return ids
}</code>

用法

使用修改後的 Count 函數和 ImplStruct 類型,我們現在可以計算 ID對於哺乳動物和人類類型。

<code class="go">mammals := []ImplStruct{
  ImplStruct{ID: 1, Name: "Carnivorious"},
  ImplStruct{ID: 2, Name: "Ominivorious"},
}

humans := []ImplStruct{
  ImplStruct{ID: 1, Name: "Peter"},
  ImplStruct{ID: 2, Name: "Paul"},
}

fmt.Println(Count(mammals))
fmt.Println(Count(humans))</code>

結論

在這個改進的程式碼中,抽象 IDed 介面和嵌入式 ImplStruct 允許 Count 函數處理任何類型實作 GetID 方法。這種方法在使用通用功能處理不同資料類型時提供了靈活性和模組化。

以上是如何在 Go 中使用泛型方法參數來使 Count 函數適用於任何具有 ID 屬性的類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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