몇 가지 패키지가있는 작은 프로그램을 작성하려고합니다. 각 패키지에는 인터페이스를 구현하는 구조체가 있습니다. 아이디어는 사용자 입력을 기반으로 특정 구조체를 작성하고 그 구조체가 가지고 있다고 가정하는 함수를 호출하는 데 사용할 패키지를 선택할 수 있습니다. 앞서 유형을 알지 못했기 때문에 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{}
(전혀) 매우 유용 할 것입니다!
문제를 더 잘 보여 주려고 시도했는데 마지막으로 수정 사항을 참조하십시오. –