面试题答案
一键面试-
编写插件代码:
- 创建Go语言源文件,例如
plugin.go
。 - 定义导出函数。在Go中,只有导出的函数(函数名首字母大写)才能在插件外部被调用。例如:
package main import "fmt" // 导出函数 func Hello() { fmt.Println("Hello from plugin") }
- 使用
go build -buildmode=plugin
命令构建插件。例如,在包含plugin.go
的目录下执行go build -buildmode=plugin -o myplugin.so
,会生成myplugin.so
插件文件。
- 创建Go语言源文件,例如
-
编写主程序代码:
- 导入
plugin
包,用于加载和使用插件。 - 使用
plugin.Open
函数打开插件文件。例如:
p, err := plugin.Open("myplugin.so") if err != nil { panic(err) }
- 使用
p.Lookup
方法查找插件中的导出函数。例如:
symbol, err := p.Lookup("Hello") if err != nil { panic(err) }
- 将查找到的符号转换为对应的函数类型并调用。例如:
type HelloFunc func() hello, ok := symbol.(HelloFunc) if!ok { panic("symbol is not of type HelloFunc") } hello()
- 导入
完整的主程序示例:
package main
import (
"fmt"
"plugin"
)
func main() {
p, err := plugin.Open("myplugin.so")
if err != nil {
panic(err)
}
symbol, err := p.Lookup("Hello")
if err != nil {
panic(err)
}
type HelloFunc func()
hello, ok := symbol.(HelloFunc)
if!ok {
panic("symbol is not of type HelloFunc")
}
hello()
}
通过以上步骤,就可以在Go中构建一个基本的插件系统,实现插件的加载与调用。