面试题答案
一键面试- 编写插件代码:
- 首先编写插件代码,插件需要导出要调用的函数。假设插件文件名为
add_plugin.go
:
// add_plugin.go package main //export Add func Add(a, b int) int { return a + b }
- 然后将其编译为插件:
go build -buildmode=plugin -o add_plugin.so add_plugin.go
- 首先编写插件代码,插件需要导出要调用的函数。假设插件文件名为
- 加载并调用插件:
- 在主程序中加载并调用插件函数,假设主程序文件名为
main.go
:
package main import ( "fmt" "plugin" ) func main() { p, err := plugin.Open("add_plugin.so") if err!= nil { fmt.Println("Open plugin error:", err) return } symbol, err := p.Lookup("Add") if err!= nil { fmt.Println("Lookup symbol error:", err) return } addFunc, ok := symbol.(func(int, int) int) if!ok { fmt.Println("Invalid type assertion") return } result := addFunc(3, 5) fmt.Println("Add result:", result) }
- 在主程序中加载并调用插件函数,假设主程序文件名为
在上述代码中:
- 第一步先编写并编译插件,通过
-buildmode=plugin
编译选项将Go代码编译为共享对象文件(.so
)。 - 第二步在主程序中,使用
plugin.Open
打开插件文件,p.Lookup
查找插件中导出的函数,然后通过类型断言将其转换为合适的函数类型并调用。