在go中声明空类型

gir*_*odt 3 go

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

type Data struct {
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

type Filter interface {
    Apply (d *Data) error
}
Run Code Online (Sandbox Code Playgroud)

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

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

type MySimpleFilter struct {}

func (f *MySimpleFilter) Apply (d *Data) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

mna*_*mna 6

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

https://codereview.appspot.com/4634124

它仍然可以实现接口契约(因此在某些情况下可能比功能方法更有用).

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

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