?
This document uses PHP Chinese website manual Release
import "plugin"
概觀
索引
Package 插件實(shí)現(xiàn) Go 插件的加載和符號(hào)解析。
一個(gè)插件是一個(gè)帶有導(dǎo)出函數(shù)和變量的 Go 主包,這些函數(shù)和變量已經(jīng)被構(gòu)建:
go build -buildmode=plugin
首次打開插件時(shí),將調(diào)用尚未包含在程序中的所有程序包的初始化函數(shù)。主要功能不運(yùn)行。插件只能初始化一次,并且不能關(guān)閉。
插件支持目前不完整,僅支持Linux,并且有已知的錯(cuò)誤。請報(bào)告任何問題。
type Plugin
func Open(path string) (*Plugin, error)
func (p *Plugin) Lookup(symName string) (Symbol, error)
type Symbol
plugin.go plugin_stubs.go
插件是一個(gè)加載的 Go 插件。
type Plugin struct { // contains filtered or unexported fields}
func Open(path string) (*Plugin, error)
Open 打開一個(gè) Go 插件。如果路徑已被打開,則返回現(xiàn)有的*插件。由多個(gè) goroutines 并行使用是安全的。
func (p *Plugin) Lookup(symName string) (Symbol, error)
查找在插件 p 中搜索名為 symName 的符號(hào)。符號(hào)是任何導(dǎo)出的變量或函數(shù)。如果找不到該符號(hào),它會(huì)報(bào)告錯(cuò)誤。由多個(gè) goroutines 并行使用是安全的。
符號(hào)是指向變量或函數(shù)的指針。
例如,一個(gè)定義為的插件
package mainimport "fmt"var V int func F() { fmt.Printf("Hello, number %d\n", V) }
可以加載 Open 函數(shù),然后可以訪問導(dǎo)出的包符號(hào) 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) = 7f.(func())() // prints "Hello, number 7"
type Symbol interface{}