Go 플러그인 개발에서 Go 플러그인에 정의된 사용자 정의 데이터 유형과의 인터페이스를 모색할 수 있습니다. 기본 응용 프로그램의 플러그인. 내보낸 기호를 검색하여 인터페이스로 표시하는 것이 가능하지만 질문이 생깁니다. 이를 사용자 정의 구조체에 입력할 수 있습니까?
주 패키지는 다른 패키지에 정의된 식별자에 액세스할 수 없기 때문에 직접적인 대답은 부정적입니다. 따라서 플러그인에서 내보낸 식별자는 애플리케이션과 동일한 유형을 공유할 수 없습니다. 플러그인과 애플리케이션 모두에서 동일한 Person 유형 정의를 사용하더라도 고유한 구별로 인해 유형 어설션이 실패합니다.
그러나 해결 방법이 있습니다. 별도의 패키지에 유형을 정의하면 플러그인과 애플리케이션 모두에서 사용할 수 있습니다. 이를 통해 사용자 정의 구조체의 유형 어설션이 가능해집니다.
예는 다음과 같습니다.
사용자 정의 유형 정의:
<code class="go">package filter type Filter struct { Name string Age int }</code>
플러그인 코드:
<code class="go">package main import ( "play/filter" ) var MyFilter = filter.Filter{ Name: "Bob", Age: 21, } func CreateFilter() filter.Filter { return filter.Filter{ Name: "Bob", Age: 21, } }</code>
기본 애플리케이션:
<code class="go">package main import ( "fmt" "log" "os" "play/filter" "plugin" ) func main() { p, err := plugin.Open("plugin.so") if err != nil { log.Fatal(err) } mf, err := p.Lookup("MyFilter") if err != nil { log.Fatal(err) } f, ok := mf.(*filter.Filter) if !ok { log.Fatal("Wrong symbol type") } fmt.Printf("%+v\n", f) }</code>
이를 실행하면 성공적인 유형 어설션 및 데이터 검색이 표시됩니다.
&{Name:Bob Age:21}
플러그인에서 내보낸 식별자(MyFilter의 변수 유형, CreateFilter의 함수 유형)와 플러그인에서 조회할 때 얻은 기호 유형(변수의 포인터 유형, 함수의 동일한 유형) 간의 유형 차이를 기록하는 것이 중요합니다.
이 접근 방식을 활용하면 개발자는 Go 플러그인과 애플리케이션 간에 사용자 정의 데이터 유형을 공유하여 효율적인 구성 요소 간 통신을 촉진할 수 있습니다.
위 내용은 ## Go 플러그인에서 사용자 정의 데이터 유형을 입력할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!