表示Go中的一个/工会的惯用方式

时间:2019-05-09 16:57:25

标签: go design-patterns

我正在寻找一种可以是Foo或Bar的结构。

现在我有:

type Foo struct{}
type Bar struct{} 

// This is the end version consumed by my package
type Baz struct {
  Foo Foo `json:"foo,omitempty"`
  Bar Bar `json:"bar,omitempty"`
  // ... there are different members here
}

然后在我的内部函数中,我需要检查Baz是否包含Foo或Bar,并以不同的方式处理它们。

是否有惯用的方式来处理此问题?现在,我正在检查Foo的成员是否为默认值,但是感觉很黑。

我已经考虑过使成员指针成为可空的,然后可以将它们检查为零。

我在这里想念东西吗?

1 个答案:

答案 0 :(得分:4)

您正在寻找algebraic data types。这个想法是定义您的“不同类型”实现的接口,并将该接口存储在期望的位置。