Go 泛型中将类型约束为可索引类型
在 Go 1.18 中,泛型的引入为类型安全开辟了新的可能性。一种常见的场景是需要将允许的类型限制为支持索引的类型,例如数组、切片、映射和字符串。
可索引性是一种约束吗?
虽然索引对于许多类型来说是一个理想的功能,但它本身并不是一个可以直接指定的约束。 Go 泛型中的约束是使用类型集指定的,类型集定义了允许的类型。
有意义的索引约束
使用联合类型集的唯一有意义的索引约束是 Indexable,它将允许的类型限制为 []byte 或 string。此约束允许定义接受两种类型并执行索引操作的泛型函数。
索引约束的限制
其他潜在的可索引类型,例如数组和映射,不能在联合类型集中进行有意义的组合。联合类型上允许的操作仅是所有成员类型都支持的操作,并且约束要求索引的键和元素类型相同。
实际实现
结果,唯一实用的索引约束是 []byte 和 string 的 Indexable。这允许对两种类型进行操作的通用函数,例如答案中提供的 GetAt 函数,它返回指定索引处的字节。
附加说明
需要注意的是,Indexable 约束不支持范围操作,因为它缺少核心类型。然而,类型 []byte 和 string 都具有范围功能,可以在需要范围操作的地方使用。
以上是Go 泛型可以有效地强制执行除“[]byte”和“string”之外的索引约束吗?的详细内容。更多信息请关注PHP中文网其他相关文章!