3

特定の type に対して、それぞれが特定の方法で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) {
    ...
}
4

2 に答える 2

6

type MySimpleFilter int空の構造体はスペースを使用しないため、特に別のタイプ (つまり ) を使用する場合と比較して、フィールドを使用しない場合、これは良い習慣であると主張します。

https://codereview.appspot.com/4634124

また、インターフェイスの契約を履行することもできます (したがって、場合によっては、機能的なアプローチよりも便利な場合があります)。

これは、値を使用しないマップ (つまりmap[string]struct{}) を使用する場合にも適したイディオムです。詳細については、このディスカッションを参照してください。

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

于 2013-01-22T16:45:09.017 に答える
0

これは好みの問題なので、明確な答えがない質問です。MySimpleFilter が他のフィルターと対称になり、コードを理解しやすくなるため、これは良い習慣だと思います。

于 2013-01-22T10:43:54.050 に答える