go - 在 Go 中表示其中一个/联合的惯用方式

标签 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 的成员是否是默认值,但这感觉很糟糕。

我考虑过让成员成为指针,这样它们就可以为空,然后我可以检查它们是否为 nil。

我是不是漏掉了什么?

最佳答案

您正在寻找 algebraic data types .这个想法是定义一个你的“不同类型”实现的接口(interface),并将该接口(interface)存储在它们需要的地方。

关于go - 在 Go 中表示其中一个/联合的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064237/

相关文章:

c++ - 将两个库相互链接

java - 什么是四人帮设计模式

java - 使用什么算法或模式来检查哪些表中的哪些行将在 mysql/pgsql 中级联删除?

javascript - 我真的需要一个单例吗?

go - 将带有 uint8_t *num 的 C 结构转换为 Go

go - golang 好用在多线程应用程序中吗?

json - 在 Go 中解码 JSON 标记联合

golang leveldb获取快照错误

go - GCP => 监听 TCP :443: bind: permission denied

c# - 构建器设计模式在现实生活中的用途是什么?