[英]declaring empty types in go
对于给定类型的Data
,我想定义一组过滤器,每个过滤器以某种方式处理Data
。 有些过滤器只需要处理数据,其他过滤器可能需要额外的参数。
type Data struct {
...
}
我希望能够定义过滤器列表,并将它们按顺序应用于Data
实例。 为了实现这一点,我定义了一个Filter
接口:
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
它仍然可以实现接口契约(因此在某些情况下可能比功能方法更有用)。
当使用您没有使用该值的map[string]struct{}
(即map[string]struct{}
)时,这也是一个很好的习惯用法。 有关详细信息,请参阅此讨
https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/lb4xLHq7wug
这是一个没有明确答案的问题,因为这是一个品味问题。 我认为这是一个很好的做法,因为它使MySimpleFilter与其他过滤器对称,这使得理解代码变得更容易。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.