随着 Go 1.18 中泛型的引入,开发人员可以定义具有类型约束的类型,确保只允许特定类型。在实现依赖于支持索引的类型的算法时,这种灵活性变得至关重要。
你可以使用索引方法约束类型吗?
要使用索引约束类型,可以考虑使用可索引性属性。但是,您可以创建的唯一有意义的约束是 type Indexable interface { ~[]byte | 〜字符串}。此约束将类型限制为字节切片和字符串。
为什么联合约束会受到限制?
联合约束类型上允许的操作仅限于约束集中的所有类型。为了支持索引,联合体中的类型必须具有相同的键和元素类型。
此外,联合体中的映射类型必须具有相同的键类型。对于数组来说,它们的长度是类型的一部分,因此为所有可能的长度定义一个联合是不切实际的。
索引的实际实现
因此,唯一的满足索引要求的联合是 []byte |细绳。由于 byte 是 uint8 的别名,因此您也可以将 []uint8 与此约束一起使用。
联合约束对索引的限制
而联合约束 []byte |字符串支持索引,但不支持范围。这是因为联合体没有核心类型。
总之,Go 泛型中支持索引的类型的约束仅限于特定的约束类型 Indexable interface { ~[]byte | 〜字符串}。除此之外,没有其他方法可以定义包含所有可索引类型的约束。
以上是你能限制类型来支持 Go 1.18 泛型中的索引吗?的详细内容。更多信息请关注PHP中文网其他相关文章!