Skip to content

Latest commit

 

History

History
13 lines (8 loc) · 1.01 KB

Go为什么没有variant types.md

File metadata and controls

13 lines (8 loc) · 1.01 KB

Go为什么没有variant types?

variant types , 比较熟知的名字是代数类型。它的能让值表现为多种类型,但是只能是指定的一些类型。编程中一个常见的例子就是一个error,可能是网络错误、安全错误或者是一个应用错误,它允许程序员通过区分错误类型来确定错误的来源。另一个例子是一个语法树,其中每个节点可以是不同类型的:声明,语句,分配等等。

我们考虑过添加variant types (变量类型),但在讨论后决定不采用,因为它们与接口的使用会让人感到困惑。 试想一下:如果variant types 中的元素就是它们本身的接口,那该怎么处理呢?

此外,其实variant types 一些显著的特点其实Go语言已经做到了。 例如上述的error示例,我们可以使用接口,用它的value来保存error,type来区分错误的类型。 语法树示例也是可行的,虽然可能不太优雅。

discriminate 歧视区分
overlap v 重叠