사전 지식
플러그인 모드
플러그인 조작 방법
go 플러그인 패키지 사용 관련 지식(권장:
go 언어 튜토리얼go 빌드 가능 지정하다 빌드 모드 . 여러 모드로 나누어져 있습니다. 구체적인 모드는 다음과 같습니다.
모드archive | |
c-archive | |
c-shared | |
default | |
exe | |
plugin | |
结构: -softplugin //根目录 -soft //软件目录 -plugins //插件目录 -itf //接口目录
사용자 정의 데이터 없음
// plugins/hello.go package main import "fmt" func Hello(){ fmt.Println("hello") } // go build -buildmode=plugin -o hello.so hello.go // soft/basetype.go package main import ( "os" "path" "plugin" "fmt" ) func main(){ //加载插件 pluginDir := "../plugins" //扫描文件夹下所有so文件 f, err := os.OpenFile(pluginDir, os.O_RDONLY, 0666) if err != nil { panic(err) } fi, err := f.Readdir(-1) if err != nil { panic(err) } plugins := make([]os.FileInfo, 0) for _, ff := range fi { if ff.IsDir() || path.Ext(ff.Name()) != ".so" { continue } plugins = append(plugins, ff) pdll, err := plugin.Open(pluginDir + "/" + ff.Name()) if err != nil { fmt.Println(err) continue } plg, err := pdll.Lookup("Hello") if err != nil { panic(err) } plg.(func())() } } // go run basetype.go
플러그인 인터페이스 인터페이스를 정의합니다.
아아아아위 내용은 Go에서 Go 동적 라이브러리 또는 정적 라이브러리를 생성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!