返回顶部
首页 > 资讯 > 后端开发 > GO >利用Go Plugin实现插件化编程的简单方法
  • 729
分享到

利用Go Plugin实现插件化编程的简单方法

2024-04-02 19:04:59 729人浏览 泡泡鱼
摘要

目录前言1.快速开始2.注意事项总结前言 说到插件这个东西,很多人都不陌生,一般来说,插件化有几个好处,一个是增加程序扩展性,丰富功能。另外,还可以实现热更新,有些大型应用,动辄几个

前言

说到插件这个东西,很多人都不陌生,一般来说,插件化有几个好处,一个是增加程序扩展性,丰富功能。另外,还可以实现热更新,有些大型应用,动辄几个GB的安装程序,如果一个小小的更新就需要重新下载整个程序,这时候我们就可以把经常更新的模块插件化,这样更新的时候只需要下载一个小更新文件。比如说平时咱们Chrome浏览器都会装一些插件,可以扩展浏览器实现更多的功能,还能灵活的安装卸载。

golang在1.8版本之后提供了一个 Plugin 的机制,可以动态的加载so文件,实现插件化,虽然并不是非常成熟,但是在特定的情况下还是非常好用。

Currently plugins are only supported on linux, FreeBSD, and MacOS.

1.快速开始

插件代码和普通代码没什么区别,只是在编译的时候不一样,但是要求是必须只有一个main包


package main

var Name = "Plugin Name"

func GetName() string {
    return Name
}

使用Go build -buildmode=plugin编译,会得到一个so文件,怎么使用这个文件呢?

很简单,分三步:

1.先打开so文件,如果一个插件已经被打开了,那么会返回已存在的plugin

2.使用Lookup查找需要调用的变量或者函数,名字必须大写开头

3.断言后调用


func main() {
    //打开加载插件,参数是插件的存储位置,可以是相对路径
    open, err := plugin.Open("/home/jwang/Documents/plg.so")
    if err != nil {
        panic(err)
    }
    //查找标识符
    lookup, err := open.Lookup("GetName")
    if err != nil {
        panic(err)
    }
    res := lookup.(func() string)()
    fmt.Printf("%v\n", res)

    name, err := open.Lookup("Name")
    if err != nil {
        panic(err)
    }
    fmt.Printf("%v\n", *name.(*string))
}

从上面的代码可以看到,插件的使用方式非常朴实无华,简单易懂。

一般来说,为了实现插件化,可以事先定义好一些接口,然后由插件去实现这些接口,这样才能保证一致性,但是接口的定义不能写在插件包或者调用包里面。这时候就需要定义一个专门的公共包,把接口的定义写在里面,这样插件包和调用包都可以引用。

2.注意事项

之所以说这个插件方案不成熟,主要是由于主程序和插件程序之间存在很强的依赖性,比如:

1.编译的GO版本必须完全一致

2.双方依赖的公共第三方库版本必须完全一致

3.GOPATH也得保持一致,这一点可以在编译时候使用trimpath参数解决

4.插件加载之后无法卸载

这些问题短时间内好像官方也没有解决的意思,或者说无法解决。总之,Go plugin目前的应用很少,毕竟作为网络编程语言,在容器化大行其道的环境下,更新程序是一件很轻松的事情,除非有特殊需要。

总结

到此这篇关于利用Go Plugin实现插件化编程的文章就介绍到这了,更多相关Go Plugin插件化编程内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: 利用Go Plugin实现插件化编程的简单方法

本文链接: https://lsjlt.com/news/155959.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Go Plugin实现插件化编程的简单方法
    目录前言1.快速开始2.注意事项总结前言 说到插件这个东西,很多人都不陌生,一般来说,插件化有几个好处,一个是增加程序扩展性,丰富功能。另外,还可以实现热更新,有些大型应用,动辄几个...
    99+
    2024-04-02
  • 怎么利用Go Plugin实现插件化编程
    这期内容当中小编将会给大家带来有关怎么利用Go Plugin实现插件化编程,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言说到插件这个东西,很多人都不陌生,一般来说,插件化有几个好处,一个是增加程序扩展...
    99+
    2023-06-25
  • go语言插件化实现的方法是什么
    在Go语言中,实现插件化的方法通常利用plugin包。plugin包提供了一种加载和使用外部插件的机制。以下是一个简单的插件化实现方...
    99+
    2024-04-02
  • 利用Nginx实现URL重定向的简单方法
    目录1. 概述2. 使用 Nginx 实现 URL 的重定向2.1 使用场景2.2 单纯的重定向2.3 依据原 URL 重定向补充:Nginx根据url参数重定向1.判断url路径2...
    99+
    2024-04-02
  • Android编程之简单计时器实现方法
    本文实例讲述了Android编程之简单计时器实现方法。分享给大家供大家参考,具体如下: 这里利用ContextMenu(上下文菜单),Chronometer实现简单计数器。 M...
    99+
    2022-06-06
    程之 方法 计时器 Android
  • Android编程简单实现拨号器功能的方法
    本文实例讲述了Android编程简单实现拨号器功能的方法。分享给大家供大家参考,具体如下:学习Android已经有2天时间了,没学习的时候觉得android可能很枯燥,但是学过之后我发觉其实这个比什么javaweb好玩多了。学习androi...
    99+
    2023-05-30
    android 拨号器 roi
  • 如何利用Go编程实现高效的算法?
    当今互联网时代,算法已经成为了程序员最基本的技能之一。而Go作为一门强大的编程语言,也拥有着优秀的并发性能和高效的代码执行速度,因此在算法实现上也有着不错的表现。本文将介绍如何利用Go编程实现高效的算法,并给出一些实际的演示代码。 一、Go...
    99+
    2023-08-08
    编程算法 数据类型 开发技术
  • Go语言网络编程:Go实现简单的内网穿透
    一、内网穿透 1. 内网穿透介绍 内网穿透是一种通过互联网建立远程连接到私有网络(内网)中设备的技术。通常情况下,内网设备由于位于一个受限制的网络环境中,无法直接从外部访问。内网穿透通过将内网设备的流...
    99+
    2023-09-02
    golang 服务器 计算机网络
  • jquery插件实现悬浮菜单的方法
    这篇文章给大家分享的是有关jquery插件实现悬浮菜单的方法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。jquery是什么jquery是一个简洁而快速的JavaScript库,它具有独特的链式语法和短小清晰的多...
    99+
    2023-06-14
  • Android编程之简单启动画面实现方法
    本文实例讲述了Android简单启动画面实现方法。分享给大家供大家参考,具体如下: 每个Android应用程序启动之后都会出现一个Splash启动界面,显示产品LOGO、公司L...
    99+
    2022-06-06
    程之 方法 启动 动画 Android
  • Android编程之简单逐帧动画Frame的实现方法
    本文实例讲述了Android编程之简单逐帧动画Frame的实现方法。分享给大家供大家参考,具体如下: 1、逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影...
    99+
    2022-06-06
    frame 程之 方法 Android
  • Android编程实现简单设置按钮颜色的方法
    本文实例讲述了Android编程实现简单设置按钮颜色的方法。分享给大家供大家参考,具体如下: 1.工程目录 a.在res目录-新建drawble文件夹放入自定义图片 2.ma...
    99+
    2022-06-06
    方法 按钮 Android
  • MyBatis_Generator插件的安装以及简单使用方法(图解)
    MyBatis_Generator_1.3.1.zip1 下载安装包安装包名称:MyBatis_Generator_1.3.1.zip2 在Eclipse上进行安装l 将插件压缩包中的features和plugins里的东西都拷贝到ecli...
    99+
    2023-05-31
    mybatis generator 插件 安装
  • Python简单实现Base64编码和解码的方法
    本文实例讲述了Python简单实现Base64编码和解码的方法。分享给大家供大家参考,具体如下: Base64编码是一种“防君子不防小人”的编码方式。广泛应用于MIME协议,作为电子邮件的传输编码,生成的编...
    99+
    2022-06-04
    简单 方法 Python
  • VSCode C++多文件编译的简单使用方法
    目录1.安装插件2.原因分析及解决思路3.解决方法测试源码C++中编写类时往往会分成.h和.cpp方便代码编写,这篇文章就来讲讲VSCode中怎么进行多文件编译。 1.安装插件 为了...
    99+
    2024-04-02
  • Android编程使用GestureDetector实现简单手势监听与处理的方法
    本文实例讲述了Android编程使用GestureDetector实现简单手势监听与处理的方法。分享给大家供大家参考,具体如下:添加手势识别监听步骤:一、给相应的控件添加触摸监听事件,二、利用GestureDetector转发这个触摸事件。...
    99+
    2023-05-30
    android gesturedetector 手势
  • Python编程之如何实现简单加密的文件
    本篇内容介绍了“Python编程之如何实现简单加密的文件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实例1:如果我知道某个账户的密码一定是...
    99+
    2023-06-15
  • 如何利用Go编程算法实现实时数据处理?
    随着数据量的不断增长,实时数据处理变得越来越重要。而Go语言作为一门高效、并发性强的编程语言,可以帮助我们快速处理大量的数据。 本文将介绍如何利用Go编程算法实现实时数据处理。我们将从以下几个方面进行讨论: Go语言的基础知识 实时数据...
    99+
    2023-09-03
    编程算法 编程算法 实时
  • 利用python实现简单的情感分析实例教程
    目录1 数据导入及预处理1.1 数据导入1.2 数据描述1.3 数据预处理2 情感分析2.1 情感分2.2 情感分直方图2.3 词云图2.4 关键词提取3 积极评论与消极评论3.1 ...
    99+
    2024-04-02
  • 如何利用C++实现一个简单的邮件客户端程序?
    如何利用C++实现一个简单的邮件客户端程序?随着互联网的快速发展,电子邮件已经成为人们日常生活中必不可少的一部分。作为一名程序员,掌握如何利用C++语言来实现一个简单的邮件客户端程序无疑是非常重要的。本文将以1500个字以内的篇幅,介绍如何...
    99+
    2023-11-04
    C++利用MQTT实现邮件客户端 C++邮件客户端编程指南 C++邮件客户端实现步骤
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作