Go参考手册
插件 | plugin
插件 | plugin
import "plugin"
- 概观
- 索引
概观
Package 插件实现 Go 插件的加载和符号解析。
一个插件是一个带有导出函数和变量的 Go 主包,这些函数和变量已经被构建:
go build -buildmode=plugin
首次打开插件时,将调用尚未包含在程序中的所有程序包的初始化函数。主要功能不运行。插件只能初始化一次,并且不能关闭。
插件支持目前不完整,仅支持Linux,并且有已知的错误。请报告任何问题。
索引
- type Plugin
- func Open(path string) (*Plugin, error)
- func (p *Plugin) Lookup(symName string) (Symbol, error)
- type Symbol
打包文件
plugin.go plugin_stubs.go
键入插件(显示源文件)
插件是一个加载的 Go 插件。
type Plugin struct {
// contains filtered or unexported fields
}
func Open(显示源文件)
func Open(path string) (*Plugin, error)
Open 打开一个 Go 插件。如果路径已被打开,则返回现有的*插件。由多个 goroutines 并行使用是安全的。
func (*Plugin) Lookup(显示源文件)
func (p *Plugin) Lookup(symName string) (Symbol, error)
查找在插件 p 中搜索名为 symName 的符号。符号是任何导出的变量或函数。如果找不到该符号,它会报告错误。由多个 goroutines 并行使用是安全的。
type Symbol(显示源文件)
符号是指向变量或函数的指针。
例如,一个定义为的插件
package main
import "fmt"
var V int
func F() { fmt.Printf("Hello, number %d\n", V) }
可以加载 Open 函数,然后可以访问导出的包符号 V 和 F .
p, err := plugin.Open("plugin_name.so")
if err != nil {
panic(err)
}
v, err := p.Lookup("V")
if err != nil {
panic(err)
}
f, err := p.Lookup("F")
if err != nil {
panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"
type Symbol interface{}
插件 | plugin相关
Go 是一种编译型语言,它结合了解释型语言的游刃有余,动态类型语言的开发效率,以及静态类型的安全性。它也打算成为现代的,支持网络与多核计算的语言。要满足这些目标,需要解决一些语言上的问题:一个富有表达能力但轻量级的类型系统,并发与垃圾回收机制,严格的依赖规范等等。这些无法通过库或工具解决好,因此Go也就应运而生了。
主页 | https://golang.org/ |
源码 | https://go.googlesource.com/go |
发布版本 | 1.9.2 |