> 백엔드 개발 > Golang > Go 플러그인 내에서 사용자 정의 인터페이스를 어떻게 효과적으로 사용할 수 있나요?

Go 플러그인 내에서 사용자 정의 인터페이스를 어떻게 효과적으로 사용할 수 있나요?

DDD
풀어 주다: 2024-12-24 03:47:18
원래의
154명이 탐색했습니다.

How Can I Use Custom Interfaces Effectively within Go Plugins?

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 }
로그인 후 복사

비교:

  • 옵션 1: 인터페이스가 필요합니다. 플러그인과 애플리케이션 코드 모두에서.
  • 옵션 2: 플러그인이 모든 유형의 값을 반환할 수 있도록 허용하여 더 큰 유연성을 제공합니다.

추가 참고:

  • 사용자 정의 인터페이스는 다른 인터페이스가 없는 플러그인 내에서만 사용할 수 있습니다.
  • 플러그인은 기본 애플리케이션에서 참조할 수 있는 자체 인터페이스를 정의할 수 없습니다.

위 내용은 Go 플러그인 내에서 사용자 정의 인터페이스를 어떻게 효과적으로 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿