私はいくつかのパッケージを持ち、それぞれがインターフェイスを実装する構造体を持つ小さなプログラムを作成しようとしています。アイデアは、ユーザーの入力に基づいて、私は特定の構造体を構築するために使用するパッケージを選択し、それからそれらが持つべきすべての機能を呼び出します。前もってタイプが分からないので、私はinterface{}
を使用してそれをフォワード宣言(最後のコードスニペットを参照)として使用できるという印象を受けました。私はこのようなものがあります。構造体を作成するときにインターフェイスを正しく使用する
data = foo.FooInput("awyiss", 1}
var something interface{}
var err error
switch some_string {
case "foo":
something, err = bob.MakeBob(foo_input)
case "bar":
// imagine bar is like foo
something, err = bar.MakeBar(foo_input)
// imagine other cases
}
something.Dong()
:私はそうのように見える何かを持って、私のメインのパッケージで
type Bob struct {
foo.FooInput
}
func (mybob *Bob) Ding() {}
func (mybob *Bob) Dong() {}
func MakeBob(foo_input foo.FooInput) (*Bob, error) {
my_bob := Bob{foo_input}
return &my_bob, nil
}
:別のパッケージ、bob
で
package foo
type FooInput struct {
Bar string
Baz int
}
type Foo interface {
Ding()
Dong()
}
を、私のようなものを持っています
/building/etcを実行すると、次のエラーが表示されます。
something.Dong undefined (type interface {} is interface with no methods)
私は間違っていることについてちょっと混乱しています...どのように私がinterface{}
(もしかして)を使うべきかについての明確化者は非常に役に立つでしょう!
私は問題をよりよく説明しようとしましたが、私の最後の編集を見てください –