私は過去10年ほどJavaとPHPで使ってきたOOPスタイルのプログラミングを手放すことがどれほど難しいか気づきました。私はgolangに数週間から行っていますが、私はgolangが持っている継承原則よりも構図の周りに自然を感じようとしています。golangでインタフェースを定義するときの考え方は?
これらの構造体をすべて満たすためには、どのように便利なインターフェイスを定義すればよいですか?私はそれらの状態/データのまわりで私の考え方をベースにするので、それはかもしれないと思う
package main
type Store struct {
name string
phone string
}
type HardwareStore struct{ Store }
type FoodStore struct{ Store }
type OnlineStore struct {
Store
url string
}
...犬、人間や車の奇妙な構造を伴わない有用な例を思い付くしようとしていませんでした彼らの行動、私は少し苦労しています。もちろん失敗
明白な最初の選択肢は、インターフェイスなしで、おそらくこの(簡体字)になり、:
s := Store{}
h := HardwareStore{}
f := FoodStore{}
o := OnlineStore{}
stores := []Store{s, h, f, o}
これはまだあなたが継承のようなものにしようとしているように聞こえますが、これはGoではうまくいきません。解決しようとしている具体的な問題がありますか? – JimB
はい、ユーザーのタイプによって属性が異なるユーザーを囲みます。私は慣用的なやり方でそれを行うために継承から離れようとしています。 – Patrick
継承ベースのOOPから離れるときに、ロジックを「反転」することができます。ユーザが異なる「タイプ」を持つのではなく、それらを区別する属性を持つユーザタイプを持っています。 _everything_の振る舞いを基にして、関心のあるフィールドを返すメソッドを定義し、メソッドセットを使ってインターフェースを定義することもできます。あなたが取り組んでいる問題に最もよく合うような人為的な例では言い難いです。 – JimB