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 ...
随机推荐
- 数据分析引擎百花齐放,为什么要大力投入ClickHouse?
更多技术交流.求职机会.试用福利,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近年来,OLAP产品的竞争日渐激烈,目前企业间流行的既有Impala.Greenplum等上一代较为成熟 ...
- PPT 常规设置
高级设置 可以将撤销次数调大,最多 150次 默认拉到PPT中的图片是被压缩的,可以设置成不压缩(解压 PPT 可查看里面的图片大小) 字体嵌入 可将自动保存时间调短,默认保存目录我习惯先保存到桌面( ...
- Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量.参数引用 要用双引号 在 Pipeline 脚本中,如果要使用变量,就必须使用 " 双引号 pipeline { ag ...
- NOKOV动作捕捉系统使多场协同无人机自主建造成为可能
近年来,工业机器人的兴起使得建造的效率和安全性得以提升,但由于机器人由于大小与活动范围的限制,在大型建筑上难以施展拳脚.上海同济大学建筑系的无人机自主建造小组,正在进行以无人机取代工业机器人进行空中建 ...
- 判断客户端是PC还是移动端问题的解决方案
今天在帮 莲的Live 2D 做浏览器适配的时候学会的一段代码 利用 Javascript 进行判断 function isPC() { //是否为PC端 var userAgentInfo = na ...
- 题解 - Japanese Student Championship 2021
前言:这场的题解由于蓝桥杯比赛拖延几天才发 关于本篇题解,目前还是有部分题没有解答出来正在加油补题ing 补题链接:Here A - Competition 题意:给定 \(X,Y,Z\) 代表的意义 ...
- 安装Amos结构方程模型分析软件的方法
本文介绍IBM SPSS Amos软件的安装方法. Amos是IBM公司旗下一款强大的结构方程建模软件.其捆绑在高级版的SPSS Statistics软件中,但其它版本的SPSS Statis ...
- ==和equals的区别和联系,StringBuffer和StringBuilder,clone方法
==和equals的区别和联系? ( 1)对于==,比较的是值是否相等 如果作用于基本数据类型的变量,则直接比较其存储的 "值"是否相等: 如果作用于引用类型的变量,则比较的是所指 ...
- ttf转eot
Webfont Generator https://www.fontsquirrel.com/tools/webfont-generator 使用@font-face显示web自定义字体,字体获取工具 ...
- 《vuejs快跑构建触手可及的高性能web应用》读书笔记
1.cdn:内容分发网络(CDN)是将资源托管到全世界各处的服务器上以实现快速分发.CDN版本对于开发和快速验证比较有用,但是将unpkg应用于生产环境前,需要检查它是否适合你. 2.假值包括fals ...