福哥答案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如何写一个插件?的更多相关文章

  1. js写一个插件

    //;分号开头,用于防止代码压缩合并时与其它代码混在一起造成语法错误 //而事实证明,uglify压缩工具会将无意义的前置分号去掉,我只是习惯了这么写 //(function(){})();立即执行函 ...

  2. 10分钟用scratch写一个大鱼吃小鱼的小游戏

    第一次给张江小朋友教Scratch课程之前,还在担心一些概念能不能向小朋友解释清楚,可上完课发现,我严重低估了小朋友的聪明程度,发现现在的孩子相比较自己8.9岁的时候,简直聪明太多倍了. 所以总结了半 ...

  3. 关于sublime text 3写一个插件

    前言 我之前一直想写一个记录自己笔记的软件,可以给因为我都记录在桌面的便签上很乱,以至于便签上满满的全是字母,很难看,但是我有不想写图形化界面,所以最终我选择了写一个sublime 插件,功能就是记录 ...

  4. golang 裸写一个pool池控制协程的大小

    这几天深入的研究了一下golang 的协程,读了一个好文 http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=2653369770& ...

  5. 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 ...

  6. Golang之写一个聊天室

    . 海量用户在线聊天系统 . 点对点聊天 . 用户登录&注册 一.服务端开发 . 用户管理 用户id:数字 用户密码:字母数字组合 用户昵称:用来显示 用户性别:字符串 用户头像:url 用户 ...

  7. 用javascript写一个emoji表情插件

    概述 以我们写的这个emoji插件为例,网上已经有一些相关的插件了,但你总感觉有些部分的需求不能被满足(如:可以自行添加新的表情包而不用去改源代码等等) 详细 代码下载:http://www.demo ...

  8. 80行代码教你写一个Webpack插件并发布到npm

    1. 前言 最近在学习 Webpack 相关的原理,以前只知道 Webpack 的配置方法,但并不知道其内部流程,经过一轮的学习,感觉获益良多,为了巩固学习的内容,我决定尝试自己动手写一个插件. 这个 ...

  9. Javascript实现一个插件

    写一个插件,兼容commonjs,amd,cmd,原生js. ;(function (global, factory) { if(typeof define == 'function' &&a ...

  10. 我是如何用python给Thunar写GUI插件的 (pygtk+glade)

    更新:zip乱码的问题可以通过安装patch之后的p7zip-natspec和unzip-natspec解决(archlinuxcn源),而仍使用Engrampa做前端.此文重点在pygtk... 问 ...

随机推荐

  1. Vue解决后台传过来的时间展示时带T

    用空格替换: {{scope.row.ctime.toLocaleString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')}} 参考作者:https: ...

  2. SpringBoot笔记--事件监听+启动流程+监控+项目部署

    事件监听 ApplicationContextInitializer SpringApplicationRunListener ApplicationRunner CommandLineRunner ...

  3. Android笔记--案例:找回密码

    找回密码 具体实现: 登录成功: 报告密码不同: 报告验证码错误: 代码相关: 找回密码的界面很简单,不细说了,直接写就行 找回密码的逻辑实现: 下一次就去写数据存储啦! 拜拜!

  4. 做bad apple第一步:超级好用的you-get下载各大网站音频!!!!

    1 安装在cmd中输入pip3 install you-get 就行了 2 简单用法下载视频: 超级暴力,直接 you-get + "网站" 就没了,会下载到当前路径.我想下载到哪 ...

  5. vmware workstation 版本合集

    各版本序列号 10.x:1Z0G9-67285-FZG78-ZL3Q2-234JG 11.x:YG74R-86G1M-M8DLP-XEQNT-XAHW2 12.x:ZC3TK-63GE6-481JY- ...

  6. SpringBoot——自定义start

    更多内容,前往 IT-BLOG 一.Mybatis 实现 start 的原理 首先在写一个自定义的 start 之前,我们先参考下 Mybatis 是如何整合 SpringBoot:mybatis-s ...

  7. Java/Kotlin 使用Redis模拟发送验证码

    原文地址: Java/Kotlin 使用Redis模拟发送邮件验证码 - Stars-One的杂货小窝 Java中常用语连接Redis的库有lettuce和jredis,一般是推荐lettuce,其具 ...

  8. 非常小的一个东西,Spring依赖注入Bean类型的8种情况

    大家好,我是三友~~ 今天来讲一个可能看似没有用但是实际又有点用的一个小东西,那就是@Autowired支持注入哪些Bean的类型. 为啥要讲这个呢? 故事说起来可能就比较长了. 不过长话可以短说,仅 ...

  9. windows下使用docker安装hyperf

    https://blog.csdn.net/weixin_39398904/article/details/128469190 http://wiki.fengfengphp.com/zh-cn/ba ...

  10. KMP算法的研究

    前脚学后脚忘,是时候给自己通俗易懂的总结一下了 KMP是什么 在计算机科学中,Knuth-Morris-Pratt字符串查找算法(简称为KMP算法)可在一个字符串S内查找一个词W的出现位置.一个词在不 ...