zoukankan      html  css  js  c++  java
  • Go Plugin介绍

    以下内容来自官方文档

    go version: 1.17.5

    综述

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

    Go插件是一个包括了可导出函数和变量的main包(可以没有main()函数),构建时使用如下命令:

    go build -buildmode=plugin
    

    插件应该在程序的init函数中调用,且应该最先调用。插件只会被初始化一次,且无法被关闭。

    当前插件只支持Linux、FreeBSD和macOS。

    详细介绍

    plugin包中只包含两个结构:PluginSymbol

    Plugin

    plugin即为导入的插件。plugin包提供了两个方法:

    • func Open(path string) (*Plugin, error)
      加载Go插件。如果path指定的插件已经加载过,将返回已存在的 *Plugin。该方法可在goroutines安全使用。
    • func (p *Plugin) Lookup(symName string) (Symbol, error)
      Lookup在插件p中查找名为symName的符号。符号可以是变量或者函数。符号不存在,则报错。该方法可在goroutines安全使用。

    Symbol

    Symbol是指针类型,可以是变量指针,也可以是函数指针。

    扩展

    plugin包中包含4个文件,plugin.goplugin_dlopen.goplugin_stubs.goplugin_test.go,实现功能的是以下两个文件:

    • plugin.go 定义前一小节介绍的数据结构和函数
    • plugin_dlopen.go 实现接口

    查看plugin_dlopen.go源码,不难发现Go插件功能的实现实际是依赖于C语言中对动态库的解析,所以使用plugin时,需设置CGO_ENABLED=1,否则plugin将无法使用。


    声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
    Author: MonsterMeng92


  • 相关阅读:
    bash变量作用域问题
    grep sed awk find用法
    vim compare 比对
    python的位数问题
    mysql使用
    lua 学习
    iptables的使用
    地铁换乘
    NOJ 1063 生活的烦恼
    猴子的下落
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/15688958.html
Copyright © 2011-2022 走看看