CODE
plugin.so
package main
import (
"fmt"
)
func DCall(){
fmt.Println("plugin.so was called")
}
func DCallWithParam(msg string){
fmt.Println("參數(shù)內(nèi)容為:",msg)
}
func main() {
fmt.Println("goroute全部退出")
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
pluginload.go
package main
import (
"plugin"
)
func main() {
//加載動態(tài)庫
p, err := plugin.Open("plugin.so")
if err != nil {
panic(err)
}
//查找函數(shù)
f, err := p.Lookup("DCall")
if err != nil {
panic(err)
}
//轉(zhuǎn)換類型后調(diào)用函數(shù)
f.(func())()
f2, err := p.Lookup("DCallWithParam")
if err != nil {
panic(err)
}
//帶參函數(shù)的調(diào)用
f2.(func(string))("hello world,plugin.so")
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
編譯動態(tài)庫
go build --buildmode=plugin plugin.go
調(diào)用動態(tài)庫
go run pluginload.go