[英]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.