variant types , 比较熟知的名字是代数类型。它的能让值表现为多种类型,但是只能是指定的一些类型。编程中一个常见的例子就是一个error,可能是网络错误、安全错误或者是一个应用错误,它允许程序员通过区分错误类型来确定错误的来源。另一个例子是一个语法树,其中每个节点可以是不同类型的:声明,语句,分配等等。
我们考虑过添加variant types (变量类型),但在讨论后决定不采用,因为它们与接口的使用会让人感到困惑。 试想一下:如果variant types 中的元素就是它们本身的接口,那该怎么处理呢?
此外,其实variant types 一些显著的特点其实Go语言已经做到了。 例如上述的error示例,我们可以使用接口,用它的value来保存error,type来区分错误的类型。 语法树示例也是可行的,虽然可能不太优雅。
discriminate 歧视,区分
overlap v 重叠