首頁  >  文章  >  後端開發  >  我們如何有效地約束 Go 1.18 泛型中的可索引類型?

我們如何有效地約束 Go 1.18 泛型中的可索引類型?

Patricia Arquette
Patricia Arquette原創
2024-10-30 03:49:28775瀏覽

How Can We Effectively Constrain Indexable Types in Go 1.18 Generics?

Go 1.18 泛型中的索引限制

隨著Go 1.18 中泛型的引入,開發人員有機會實現適用於特定對象的演算法類型。常見的要求是使用支援索引的類型,例如陣列、切片、映射和字串。

可索引約束

將類型參數限制為可索引類型,請考慮將以下約束與聯合結合使用:

<code class="go">type Indexable interface {
    ~[]byte | ~string
}</code>

可索引約束的限制

雖然上述約束適用於索引字節和字串,但存在以下限制:將其與其他可索引類型一起使用,例如映射和數組:

  • 映射: 聯合必須僅包含具有相同鍵和元素類型的映射類型。此限制使得必須處理具有不同鍵和值的映射的通用演算法變得不切實際。
  • 陣列:陣列的長度是其類型的一部分,因此聯合需要指定所有可能的長度。這可能很麻煩並且容易出現越界錯誤。

替代方法

由於這些限制,支持索引的唯一實用聯合是[]位元組|細繩。此聯合允許索引操作,但不支援範圍操作,因為它缺少核心類型。

用法範例

以下範例示範如何使用Indexable 限制:

<code class="go">func GetAt[T Indexable](v T, i int) byte {
    return v[i]
}</code>

這個函數接受一個可索引值和索引,並傳回指定索引處的位元組。

結論

雖然Go 1.18 提供了一種使用聯合將類型約束為可索引類型的方法,該約束的限制意味著它僅適用於有限的用例集,即索引位元組和字串。

以上是我們如何有效地約束 Go 1.18 泛型中的可索引類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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