Go 플러그인의 사용자 정의 인터페이스
질문: Go 플러그인에서 사용자 정의 인터페이스를 어떻게 사용할 수 있나요?
배경: 구현을 위해서는 사용자 정의 인터페이스가 필수적입니다. 재사용 및 확장 가능한 소프트웨어 구성 요소. 그러나 Go 플러그인 내에서 이를 사용하려는 초기 시도에서 다음 오류가 발생했습니다.
panic: interface conversion: plugin.Symbol is func() (filter.Filter, error), not func() (filter.Filter, error)
답변:
Go 플러그인은 플러그인 자체 내에 정의된 유형에 액세스할 수 없습니다. , 다음 방법에 따라 사용자 정의 인터페이스를 사용할 수 있습니다:
1. 공통 패키지 사용:
플러그인과 기본 애플리케이션에서 모두 가져오는 패키지에서 인터페이스를 정의합니다. 이 접근 방식을 사용하면 두 구성 요소 모두 동일한 유형 정의를 사용할 수 있습니다.
2. 플러그인에서 인터페이스 반환{}:
플러그인 함수가 인터페이스{} 유형의 값을 반환하도록 합니다. 그런 다음 기본 애플리케이션은 반환된 값에 대한 유형 어설션을 정의하여 사용자 정의 인터페이스를 사용할 수 있습니다.
예:
기본 애플리케이션:
package main import ( "fmt" "plugin" "github.com/fagongzi/gateway/pkg/filter" ) func main() { // ... GetInstance(func() (filter.Filter, error)) // Error occurs }
플러그인:
package plugin import "github.com/fagongzi/gateway/pkg/filter" type plgFilter struct{} func (plgFilter) Name() string { return "Bob" } func (plgFilter) Age() int { return 23 } // Return an "empty" filter to satisfy the function signature func GetInstance() (filter.Filter, error) { return nil, nil } func GetInstanceInter() (interface{}, error) { return &plgFilter{}, nil } func GetInstancePtr() (*plgFilter, error) { return &plgFilter{}, nil }
비교:
추가 참고:
위 내용은 Go 플러그인 내에서 사용자 정의 인터페이스를 어떻게 효과적으로 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!