문제 설명:
컴파일된 Go 바이너리가 주어지면 가능합니까? 외부 Go 파일을 동적으로 컴파일하고 즉시 사용하기 위해 기존 바이너리에 링크합니다. 실행?
해결책:
동적 로딩 및 링크가 가능한 공유 라이브러리 생성 기능은 2015년 8월 Go 버전 1.5에 도입되었습니다.
빌드 및 링크 단계 동적으로:
공유 라이브러리 생성:
다음을 사용하여 외부 Go 파일을 공유 라이브러리로 컴파일합니다. -빌드모드=공유 플래그:
go install -buildmode=shared my_library.go
동적 연결을 사용하여 바이너리 빌드:
Go 컴파일 -linkshared를 사용하여 공유 라이브러리를 로드하고 링크할 바이너리 플래그:
go build -linkshared main.go
예:
main.go에서 다음 코드를 고려하세요.
package main import ( "fmt" "plugin" ) func main() { p, err := plugin.Open("my_library.so") if err != nil { fmt.Println(err) return } runFoo, err := p.Lookup("RunFoo") if err != nil { fmt.Println(err) return } runFoo.(func())() // Call the exported function from the shared library }
참고: 공유 라이브러리 Go 소스 코드에서 //export RunFoo를 사용하여 RunFoo 함수를 내보내야 합니다.
위 내용은 Go 바이너리가 런타임 시 외부에서 컴파일된 Go 코드를 동적으로 로드하고 연결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!