Go Plugin介绍
以下内容来自官方文档。
go version: 1.17.5
综述
plugin包实现了Go插件的加载和符号解析。
Go插件是一个包括了可导出函数和变量的main包(可以没有main()函数),构建时使用如下命令:
go build -buildmode=plugin
插件应该在程序的init函数中调用,且应该最先调用。插件只会被初始化一次,且无法被关闭。
当前插件只支持Linux、FreeBSD和macOS。
详细介绍
plugin包中只包含两个结构:Plugin和Symbol。
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.go、plugin_dlopen.go、plugin_stubs.go和plugin_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
Go Plugin介绍的更多相关文章
- maven surefire plugin介绍
示例 <!-- 测试运行器,生成测试报告 --> <plugin> <groupId>org.apache.maven.plugins</groupId> ...
- Logstash:input plugin 介绍
- jenkins 常用插件和配置项介绍和使用
jenkins 上搜索不到的插件可以在如下地址下载: http://updates.jenkins-ci.org/download/plugins/ 1.Notification Plugin 介绍: ...
- 使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)
http://www.jmeter.cf/loadtesting-jmeter.html 为什么使用jmeter, 它免费开源, 不断发展, 功能逐渐强大. 可以做功能,负载, 性能测试.一套脚本可以 ...
- Eclipse常用开发插件
以下是我整理的自己开发过程中的常用Eclipse插件,按字母排序: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequen ...
- 转:Eclipse常用开发插件
以下是我整理的自己开发过程中的常用Eclipse插件,按字母排序: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequen ...
- Eclipse常用的插件安装
嫌公司用的eclipse不爽,准备自己弄一个,diy的,没想到装插得烦死人. 诱惑人的“常用插件”: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活 ...
- eclipse 常用插件 整理
开发过程中的常用Eclipse插件,按字母排序: (1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequence图,usecas ...
- 【JMeter】教程及技巧汇总(转载)
转载地址:http://www.hissummer.com/jmeter-summary.html 参考/学习资料:http://www.yiibai.com/jmeter/jmeter_build_ ...
- jQuery-jqprint.js打印插件使用高版本jQuery时问题
使用jqprint打印插件的网页demo代码: <!doctype html> <html> <head> <meta charset="utf-8 ...
随机推荐
- 十大 CI/CD 安全风险(一)
CI/CD 环境.流程和系统是现代软件组织的核心.他们将代码从开发工程师的工作站传递到生产环境.结合 DevOps 和微服务架构的兴起,CI/CD 系统和流程重塑了工程生态系统: 技术堆栈更加多样化, ...
- Spring Boot 接口返回文件流
import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; ...
- 机器人多目标包围问题(MECA)新算法:基于关系图深度强化学习
摘要:中科院自动化所蒲志强教授团队,提出一种基于关系图的深度强化学习方法,应用于多目标避碰包围问题(MECA),使用NOKOV度量动作捕捉系统获取多机器人位置信息,验证了方法的有效性和适应性.研究成果 ...
- Codeforces Round #710 (Div. 3)个人简单题解
补题链接:Here Proble-A. Strange Table 根据 x 确定坐标确定的行数和列数. int main() { ios_base::sync_with_stdio(false), ...
- 深入学习和理解 Redux
本文首发于 vivo互联网技术 微信公众号 链接: https://mp.weixin.qq.com/s/jhgQXKp4srsl9_VYMTZXjQ作者:曾超 Redux官网上是这样描述Redux, ...
- 详解 Serverless 架构的 6 大应用场景
导读 Serverless 架构将成为未来云计算领域重要的技术架构,将会被更多的业务所采纳.进一步深究,Serverless 架构在什么场景下有优秀的表现,在什么场景下可能表现得并不是很理想呢?或者说 ...
- nginx安装 没有网络且缺少基础包的环境下
一.安装 [root@oracle ~]# cd /etc/yum.repos.d/ [root@oracle yum.repos.d]# rm -rf * [root@oracle yum.repo ...
- Pickle反序列化学习
什么是Pickle? 很简单,就是一个python的序列化模块,方便对象的传输与存储.但是pickle的灵活度很高,可以通过对opcode的编写来实现代码执行的效果,由此引发一系列的安全问题 Pick ...
- [转帖]10.2 Data Collector与MDW
10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...
- [转帖]TIDB - TIDB集群的扩容和缩容及TIUP指令说明
一.TIUP工具简介 前面介绍了使用TIUP搭建TIDB集群,本篇文章详细介绍下使用TIUP对集群进行扩容和缩容. 在面对双十一这种流量突峰的场景,我们平常的TIDB集群有可能承受不住,因此需要提前进 ...