开发人员经常需要在 Go 中定义一个通用函数来接受具有某些字段的值。一个常见的例子是需要访问名为 ID 的整数类型字段。尽管尝试过,通用约束似乎难以捉摸。
不幸的是,如果不在接口中定义字段,在 Go 中强制执行此类约束是不可行的。与某些提案不同,当前的实现不支持泛型中的结构类型。
强制字段存在需要在接口中定义字段。该接口将充当类型约束,确保传递给泛型函数的任何类型都拥有所需的字段:
type IDer interface { ID int }
要访问泛型函数中的受约束字段,传递的类型必须满足接口约束。这种方法提供了一种机制来确保所需字段的存在和可访问性:
func Print[T IDer](s T) { fmt.Print(s.ID) }
需要注意的是,这种方法不支持访问具有部分结构的字段类型。但是,未来的版本可能会解决此限制。
强制泛型函数中某些字段的存在需要在接口中定义相应的方法。此约束确保传递给函数的类型拥有操作所需的字段。
以上是如何在 Go 中约束泛型类型以确保特定字段的存在?的详细内容。更多信息请关注PHP中文网其他相关文章!