저는 Go 전문가가 아니므로 이동을위한 이상적인 방법이 아닙니다. 본질적으로, 나는 그것을 위해 작성된 플러그인을 가질 수 있어야하는 메인 애플리케이션을 가지고있다. 플러그인은 모두 주어진 형식을 따르며 go build -buildmode=plugin
으로 빌드됩니다. 최종 사용자가 매번 주 응용 프로그램을 다시 컴파일해야하는 것은 원하지 않습니다. 이상없이 새 컴퓨터에 문제없이 드래그 앤 드롭 할 수 있어야합니다.플러그인과 기본 응용 프로그램 간의 Golang 패키지 버전
플러그인과 응용 프로그램간에 정보를 전달하기 위해 C 헤더 파일과 비슷한 것으로 "공통"이라는 세 번째 패키지가 정의되어 있습니다. 이 인터페이스는 둘 다 사용할 수있는 인터페이스와 정수 상수 만 정의합니다. 응용 프로그램은 인터페이스를 준수하는 유형을 생성하고이를 플러그인에 전달하여 사용할 수 있습니다.
컴파일 할 때 제대로 작동하는 것으로 보이며 응용 프로그램에 plugin.Open
을 사용하여 플러그인을로드 할 수 있습니다. 캐치는 common
패키지의 위치를 이동하려고 할 때 발생합니다. 로컬 디렉토리에 원본 응용 프로그램을 빌드하고 응용 프로그램을 설치하는 스크립트가 있고 common
패키지가 GOPATH
에 복사되므로 찾을 수 있습니다. 자, 플러그인을 작성하고 common
패키지의 전역 사본을 참조하여 컴파일하려고 할 때 패키지의 두 번 발생을 다른 버전으로보고 있기 때문에 기본 애플리케이션에서 플러그인을로드 할 수 없습니다.
필자가 알고있는 점은 패키지 버전을 결정할 때 컴파일 타임에 패키지의 모든 Go 파일을 해시하는 것입니다. 패키지가 발견 된 서버의 위치를 포함하여이 해시가 있습니까?
패키지의 실제 버전이 동일하다는 사실을 알고 있습니다. 유일한 차이점은 내가 cp -r src/myapp /usr/local/go/src
입니다. 이 방법을 사용하면 사용자가 주 응용 프로그램을 다른 컴퓨터로 옮길 수 있고 다시 컴파일 할 필요가없는 접근 방식보다 더 좋은 방법이 있습니까?
또한 설명 : 나는 myapp
에이 컴파일되면
가 여기 내 디렉토리 구조
./
|-- main.go
|-- src/myapp/common
| |-- Common.go
|-- install.sh
이다, 나는 GOPATH
에 src/myapp/common
을 복사 한 다음 해당 패키지에 대한 go build -buildmode=plugin
와 플러그인을 구축 할 수 있습니다. myapp
에서 해당 플러그인을로드 할 때 myapp/common
의 두 버전은 서버의 위치 만 다르지만 차이가 있다고 봅니다.
올바른 방법은 공통 패키지를 별도의 프로젝트로 분리 한 다음 두 프로젝트 모두에서 독립 프로젝트를 참조하게하는 것입니다. 그건 의미가 있습니다. 나중에 새 컴퓨터로 이동하면 원래 컴퓨터에서 컴파일되는 기본 응용 프로그램과 올바르게 작동합니까? –
네, 일반적인 패키지를 안정적인 가져 오기 URL로 유지하는 것이 좋습니다. go는 다른 패키지로 다른 URL을 보게됩니다. 그래서 그것을 고치면 잘 작동합니다. 별도의 프로젝트라면 플러그인이나 그와 비슷한 것으로 부를 수 있으며 플러그인을 작성하는 방법을 설명하는 readme와 함께 플러그인의 기능을 지원하게 만들 수 있습니다. –
Gotcha! 나는 그것을 시도하고 내 문제를 해결하는 것으로 보인다. 매우 감사. –