gpt4 book ai didi

go - 从插件中删除主机的源代码以减小文件大小

转载 作者:IT王子 更新时间:2023-10-29 02:01:04 25 4
gpt4 key购买 nike

我目前正在试验 golang 的插件系统。我在测试中遇到的一个问题是插件的文件大小相对较大。

加载插件的应用程序将被称为“主机”。

主机应用程序本身大约 50MiB 大,因为它是一个 Web 应用程序,应该使用插件功能进行扩展。

我已经实现了一个小型插件加载器来启动插件。

例如,插件可以使用应用程序中已有的 API 来访问数据库。

我已经为这个问题准备了一个示例插件。插件 .so 文件大小约为 39MiB。这让我有理由怀疑该插件还包含来自主机应用程序的源代码。

用于创建main.so的命令:

go build -ldflags="-s -w" --buildmode=plugin main.go

是否可以从应用程序中“删除”重复的源代码以减小文件大小,因为当插件加载时它已经在运行时加载?

插件加载器:https://github.com/jonasfranz/gitea/blob/feature/plugin/modules/plugins/loader.go

示例插件:https://git.jonasfranz.software/JonasFranzDEV/giteaplugin

最佳答案

插件中不包含源代码。但是它们包含的是它们的依赖性递归地。之所以如此,是因为无法保证加载插件的主应用程序也包含依赖项,因此要确保插件的可行性,其依赖项必须是自包含的。

如果主应用程序也包含相同的依赖项(具有相同的版本),这不会导致问题,它们只会在 go 运行时“实例化”一次,有关详细信息,请参见 How do Go plugin dependencies work?

如何减少插件的大小?除了删除调试信息(您所做的)之外,您还应该尽量减少依赖性。

这可能需要对插件或您希望为其创建插件的应用程序进行重新设计和重大更改。例如,插件不应该引用“实现”包,插件应该只引用“接口(interface)”包。如果接口(interface)和实现没有分离,这可能是不可能的(因此可能也需要更改主应用程序)。

您也可以尝试尝试压缩二进制文件的实用程序,有关详细信息,请参阅:Shrink your Go binaries with this one weird trick

关于go - 从插件中删除主机的源代码以减小文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54064390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com