登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-20 20:54:32 256浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《从插件中删除主机的源代码以减少文件大小》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我目前正在尝试 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?

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

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

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

以上就是《从插件中删除主机的源代码以减少文件大小》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>