go - 在go中声明空类型

标签 go

对于给定类型 Data ,我想定义一组过滤器,每个过滤器都以特定方式处理 Data 。一些过滤器只需要处理数据,其他过滤器可能需要额外的参数。

type Data struct {
    ...
}

我希望能够定义一个过滤器列表,并将它们按顺序应用于 Data 的实例。为了实现这一点,我定义了一个 Filter 接口(interface):

type Filter interface {
    Apply (d *Data) error
}

要定义过滤器,我所要做的就是创建一个新类型并为其定义 Apply 方法。

现在,假设我有一个不需要任何附加信息的过滤器。 将其定义为一个空的 struct 是好的做法吗?

type MySimpleFilter struct {}

func (f *MySimpleFilter) Apply (d *Data) {
    ...
}

最佳答案

我认为如果您不使用 Field,这是一种很好的做法,特别是与使用其他类型(即 type MySimpleFilter int)相比,因为空结构不使用空间:

https://codereview.appspot.com/4634124

并且它仍然可以实现接口(interface)契约(因此在某些情况下可能比函数式方法更有用)。

当使用您对值没有用处的 map (即 map[string]struct{})时,这也是一个很好的习惯用法。有关详细信息,请参阅此讨论:

https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/lb4xLHq7wug

关于go - 在go中声明空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14456585/

相关文章:

go - 使用其他 bool 值进行switch语句

go - 使用 Golang Oauth2 库更新访问 token

go - 要为多个端点设置http客户端吗?

go - json.Encoder 中的日期输出来自哪里?

go - Go for protobuf 中的相对导入,找不到模块路径

pointers - 为什么从非指针值调用的闭包不能正确添加到 slice 中?

windows - 如何在 Windows 中子类化一个窗口? (使用围棋)

go - HandleFunc中的http主机和端口信息

作为结构成员的函数

mysql - mysql的语法数组