Golang插件机制有哪些实现方式可以比较?
- 内容介绍
- 文章标签
- 相关推荐
本文共计824个文字,预计阅读时间需要4分钟。
我们知道,类似于Java等半编译半解释型语言编译生成的都是类文件,这些类文件是中间态的字节码。因此,在Java中,我们希望实现程序工作的动态扩展,可以通过Java的字节码编辑技术ASM,结合JVM来实现。
我们知道类似 Java 等半编译半解释型语言编译生成的都是类似中间态的字节码,所以在 Java 里面我们想要实现程序工作的动态扩展,可以通过 Java 的字节码编辑技术 ASM,并结合 JVM 的 字节码动态加载技术来实现动态修改和加载字节码。
但是 Golang 是编译型语言,编译后直接生成的是可执行文件,但是如果我们又需要在不发布版本的情况下实现程序功能的动态扩展,我们可以通过什么方式来实现呢?下面主要介绍 Golang 里面实现程序功能动态扩展的两种方式:Golang 原生插件和 go-plugin 插件。
一、Golang 原生插件
Golang 原生插件使用流程如下:
将代码编译成 .so 文件
package main const Name = "PluginName" func GetName() string { return Name }将以上代码使用 go build -buildmode=plugin 命令即可编译成插件。
本文共计824个文字,预计阅读时间需要4分钟。
我们知道,类似于Java等半编译半解释型语言编译生成的都是类文件,这些类文件是中间态的字节码。因此,在Java中,我们希望实现程序工作的动态扩展,可以通过Java的字节码编辑技术ASM,结合JVM来实现。
我们知道类似 Java 等半编译半解释型语言编译生成的都是类似中间态的字节码,所以在 Java 里面我们想要实现程序工作的动态扩展,可以通过 Java 的字节码编辑技术 ASM,并结合 JVM 的 字节码动态加载技术来实现动态修改和加载字节码。
但是 Golang 是编译型语言,编译后直接生成的是可执行文件,但是如果我们又需要在不发布版本的情况下实现程序功能的动态扩展,我们可以通过什么方式来实现呢?下面主要介绍 Golang 里面实现程序功能动态扩展的两种方式:Golang 原生插件和 go-plugin 插件。
一、Golang 原生插件
Golang 原生插件使用流程如下:
将代码编译成 .so 文件
package main const Name = "PluginName" func GetName() string { return Name }将以上代码使用 go build -buildmode=plugin 命令即可编译成插件。

