隨著Go 1.18 中泛型的引入,開發人員可以定義具有類型約束的類型,確保只允許特定類型。在實現依賴於支援索引的類型的演算法時,這種靈活性變得至關重要。
你可以使用索引方法約束型別嗎?
要使用索引約束類型,可以考慮使用可索引性屬性。但是,您可以建立的唯一有意義的約束是 type Indexable interface { ~[]byte | 〜字串}。此約束將類型限制為位元組切片和字串。
為什麼聯合約束會受到限制?
聯合約束類型上允許的操作僅限於約束集中的所有類型。為了支援索引,聯合體中的類型必須具有相同的鍵和元素類型。
此外,聯合體中的映射類型必須具有相同的鍵類型。對於數組來說,它們的長度是類型的一部分,因此為所有可能的長度定義一個聯合是不切實際的。
索引的實際實現
因此,唯一的滿足索引要求的聯合是 []byte |細繩。由於 byte 是 uint8 的別名,因此您也可以將 []uint8 與此約束一起使用。
聯合約束對索引的限制
而聯合約束 []byte |字串支援索引,但不支援範圍。這是因為聯合體沒有核心類型。
總之,Go 泛型中支援索引的類型的限制僅限於特定的約束類型 Indexable interface { ~[]byte | 〜字串}。除此之外,沒有其他方法可以定義包含所有可索引類型的約束。
以上是你能限制型別來支援 Go 1.18 泛型中的索引嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!