Package plugin

import "plugin"
Overview
Index

Overview ▾

包插件实现Go插件的加载和符号解析.

插件是Go主程序包,具有导出的函数和变量,这些函数和变量是使用以下构建的:

go build -buildmode=plugin

首次打开插件时,将调用尚未包含在程序中的所有软件包的init函数. 主要功能未运行. 插件仅初始化一次,无法关闭.

当前,仅Linux和macOS支持插件. 请报告任何问题.

type Plugin 1.8

插件是一个加载的Go插件.

type Plugin struct {
    // contains filtered or unexported fields
}

func Open 1.8

func Open(path string) (*Plugin, error)

Open打开一个Go插件. 如果已经打开路径,则返回现有的* Plugin. 对于多个goroutine并发使用是安全的.

func (*Plugin) Lookup 1.8

func (p *Plugin) Lookup(symName string) (Symbol, error)

查找在插件p中搜索名为symName的符号. 符号是任何导出的变量或函数. 如果找不到该符号,它将报告错误. 对于多个goroutine并发使用是安全的.

type Symbol 1.8

符号是指向变量或函数的指针.

例如,定义为

package main

import "fmt"

var V int

func F() { fmt.Printf("Hello, number %d\n", V) }

可以加载打开功能,然后可以访问导出的软件包符号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{}

by  ICOPY.SITE