4

Golang标准库——plugin

 收集于1周前 阅读数 4
以下为 快照 页面,建议前往来源网站查看,会有更好的阅读体验。
原文链接: https://studygolang.com/articles/31185

plugin

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

目前,plugin仅在Linux上有效。

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

go build -buildmode=plugin

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

type Plugin

type Plugin struct {
    pluginpath string
    err        string        // set if plugin failed to load
    loaded     chan struct{} // closed when loaded
    syms       map[string]interface{}
}

Plugin是一个已加载的Go插件。

func Open

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

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

func (*Plugin) Lookup

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

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

type Symbol

type Symbol interface{}

Symbol是指向变量或函数的指针。

例如,定义为

package main

// // No C code needed.
import "C"

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"

有疑问加站长微信联系

iiUfA3j.png!mobile

猜你喜欢

  • 29

    golang 标准库(encoding/json)学习 什么是json json的全称是 JavaScript Object Notation,是一种轻量级的数据交换格式。易于人阅读和编写,同时易于机器解析和生成。 json有两种类型的数据,用go...

  • 33

  • 7

    golang 标准命令

    go源码文件: 命令源码文件:总是作为可执行的程序的入口 库源码文件:一般用于集中放置各种待被使用的程序实体(全局常量、全局变量、接口、结构体、函数等等) go b...

  • 15

    strings包 Go语言标准库中也存在这样一个名为 strings包 ,额外封装一些方法用于处理字符串。 包含判断 前后缀包含 func main() { //前后缀包含 var st...

  • 14

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200828164558320.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NpbmF0XzM3MzI4NTY5,size_16,color_FFFFFF,t_70#pic_...

  • 0

    fmt包实现了类似C语言printf和scanf的格式化I/O。格式化动作('verb')源自C语言但更简单。 Printing verb: 通用: %v 值的默认格式表示 %+v 类似%v,但输出结构体时会添加字...

  • 1

    build constant doc build 包build收集有关Go的信息。 Go Path Go路径是包含Go源代码的目录树的列表。咨询以解决在标准Go树中找不到的导入。缺省路径是GOPAT...

  • 4

    reflect reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。调用ValueOf函数返回一个Value类型值,该值代表...

  • 2

    sort sort包提供了排序切片和用户自定义数据集的函数。 type Person struct { Name string Age int } func (p Person) String() string { return fmt.Sprintf("%s: %d", p.Name, p.Age) } type ByAge []P...

  • 1

    strconv strconv包实现了基本数据类型和其字符串表示的相互转换。 Constants const IntSize = intSize IntSize是int或uint类型的字位数。 Variables var ErrRange = e...

关于极客头条


聚合每日国内外有价值,有趣的链接。

AD