2020-10-02:golang如何写一个插件?
福哥答案2020-10-02:#福大大架构师每日一题#
简单回答:
buildmode=plugin
plugin.Open
p.Lookup
[中级回答:](https://www.zhihu.com/question/423802485)
golang的plugin是使用-buildmode=plugin 的编译flag编译出的软件包,用于生成共享库(.so)库文件。 Go包中导出的函数和变量显示为ELF符号,可以在另一个golang程序中使用golang中的`plugin`包在运行时查找和绑定它们。
先写这样一段plugin代码:
package main import "fmt" // 包含一个简单函数的模块
func Add(a int, b int) int {
fmt.Printf("\nAdding a=%d and b=%d", a, b)
return a + b
}
用下面的指令编译成plugin:
go build -buildmode=plugin -o math.so
然后可以在另外一个golang代码中加载并调用编译好的plugin:
// 加载plugin
plugins, err := filepath.Glob("math.so")
if err != nil {
panic(err)
}
fmt.Printf("Loading plugin %s", plugins[0])
p, err := plugin.Open(plugins[0])
if err != nil {
panic(err)
} // 查找叫Add的函数
symbol, err := p.Lookup("Add")
if err != nil {
panic(err)
}
addFunc, ok := symbol.(func(int, int) int)
if !ok {
panic("Plugin has no 'Add(int)int' function")
} // 调用函数
addition := addFunc(3, 4)
fmt.Printf("\nAddition is:%d", addition)
***
[评论](https://user.qzone.qq.com/3182319461/blog/1601595469)
2020-10-02:golang如何写一个插件?的更多相关文章
- js写一个插件
//;分号开头,用于防止代码压缩合并时与其它代码混在一起造成语法错误 //而事实证明,uglify压缩工具会将无意义的前置分号去掉,我只是习惯了这么写 //(function(){})();立即执行函 ...
- 10分钟用scratch写一个大鱼吃小鱼的小游戏
第一次给张江小朋友教Scratch课程之前,还在担心一些概念能不能向小朋友解释清楚,可上完课发现,我严重低估了小朋友的聪明程度,发现现在的孩子相比较自己8.9岁的时候,简直聪明太多倍了. 所以总结了半 ...
- 关于sublime text 3写一个插件
前言 我之前一直想写一个记录自己笔记的软件,可以给因为我都记录在桌面的便签上很乱,以至于便签上满满的全是字母,很难看,但是我有不想写图形化界面,所以最终我选择了写一个sublime 插件,功能就是记录 ...
- golang 裸写一个pool池控制协程的大小
这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770& ...
- Yii2 – 如何写一个插件 , 如何做一个扩展
原文地址: http://www.fancyecommerce.com/2016/05/10/yii2-%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AA%E6 ...
- Golang之写一个聊天室
. 海量用户在线聊天系统 . 点对点聊天 . 用户登录&注册 一.服务端开发 . 用户管理 用户id:数字 用户密码:字母数字组合 用户昵称:用来显示 用户性别:字符串 用户头像:url 用户 ...
- 用javascript写一个emoji表情插件
概述 以我们写的这个emoji插件为例,网上已经有一些相关的插件了,但你总感觉有些部分的需求不能被满足(如:可以自行添加新的表情包而不用去改源代码等等) 详细 代码下载:http://www.demo ...
- 80行代码教你写一个Webpack插件并发布到npm
1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...
- Javascript实现一个插件
写一个插件,兼容commonjs,amd,cmd,原生js. ;(function (global, factory) { if(typeof define == 'function' &&a ...
- 我是如何用python给Thunar写GUI插件的 (pygtk+glade)
更新:zip乱码的问题可以通过安装patch之后的p7zip-natspec和unzip-natspec解决(archlinuxcn源),而仍使用Engrampa做前端.此文重点在pygtk... 问 ...
随机推荐
- Postgresql 或GreenPlum 查询结果部分字段转json格式并保留字段名(row_to_json)
-- 一些搜索结果给出 部分字段转json保留原字段的方式是用子查询select row_to_json(t) from ( select id, text from words ) t 但是如果子查 ...
- rabbit.bat server启动闪退,rabbitmq (ArgumentError) argument error,rabbitmq页面无法开启解决方案
步骤1:下载rabbitmq-plugins rabbitmq-plugins enable rabbitmq_managemen 步骤2:rabbitmq-service移除服务 rabbitmq- ...
- grpc - 使用
grpc 工具 BloomRPC GRPC - 使用 protobuf 定义protobuf,并将protobuf文件,通过java的plugin打包生成java-grpc相关文件.参照:grpc-p ...
- OSPF故障诊断
- 制作可以显示GIF动图的activeX 控件
因为工作需要,我需要一个可以显示gif 动图的控件,用来在VBS中显示动图,结果找了半天发现根本没有这样的控件,所以只能搜集资料自己来制作一个. 下面记录一下步骤: 1. 下载 PictureEx.h ...
- Hello, YOU -- 通过简单的 hello_test.go 程序理解并学会编写测试
Hello, YOU 书接上文上篇文章中,我们尝试编写了hello word 函数以及第一个测试 hello_test package main import "fmt" func ...
- Cesium 后处理(Post Process)
原文地址:https://blog.csdn.net/ls870061011/article/details/123910821 作者:GIS李胜 为实现三维模型的更炫.更酷.更美观,Cesium在1 ...
- js面试题学习整理
1. 异步操作有哪些? 回调函数,事件监听,promise,ajax,async,setTimeout,Generator 2. Promise是什么? Promise是异步编程的一种解决方案. 从语 ...
- 企业实践 | 国产操作系统之光? 银河麒麟KylinOS-V10(SP3)高级服务器操作系统基础安装篇
[点击 关注「 全栈工程师修炼指南」公众号 ] 设为「️ 星标」带你从基础入门 到 全栈实践 再到 放弃学习! 涉及 网络安全运维.应用开发.物联网IOT.学习路径 .个人感悟 等知识分享. 希望各位 ...
- 五月二十七日jdbc,算法以及数据库
1.ResultSetMetaData接口主要获得结果集.例如:结果集字段数量和名字通过ResultSet的getMetaData()方法获得对应对象 public class app17_20 { ...