在 Go 中,联合(其他语言中的常见数据结构)本质上是不存在的。然而,像处理 XML 过度使用选择类型这样的情况需要它们的实现。
尝试在 Go 中模拟联合,如提供的代码片段所示,引入了显着的代码冗余。每种类型需要单独的容器结构和构造函数,以及多个谓词和 getter,这使得实现变得臃肿。
要简化联合处理,请考虑创建一个名为 Misc 的接口,用作联合类型对象的标记:
type Misc interface { ImplementsMisc() } type Comment Chars func (c Comment) ImplementsMisc() {} type ProcessingInstruction func (p ProcessingInstruction) ImplementsMisc() {}
有了这个接口,就可以单独定制函数Misc 对象,而不关心特定的底层类型。通过确保传递给这些函数的任何对象都必须实现 Misc 来实现类型安全。
虽然 Go 缺乏内置的联合支持,但可以通过通过嵌套结构模拟联合的行为来实现联合和接口。通过使用接口作为联合对象的标记可以减轻这种方法固有的代码冗余。
以上是我们如何在 Go 中有效地实现类型安全联合?的详细内容。更多信息请关注PHP中文网其他相关文章!