我在Go中编写了一个应用程序。它有两个在编译之前需要满足的外部依赖项。在Go生态系统中,为简单的安装过程打包此应用程序的最佳方法是什么,包括安装这些远程deps?用户如何安装我的应用程序?
答案 0 :(得分:10)
如果您希望用户编译您的应用程序,并且该应用程序依赖于第三方软件包或资产,那么我建议只对所支持的平台进行交叉编译并提供二进制文件。
< / LI>如果您希望在应用程序旁边提供 assets (例如配置文件),则可以:a)将二进制文件与资产打包并tar / zip up ; b)base64对资产进行编码并将其编译为二进制see here for a good example或c)创建一个为用户执行此操作的构建/安装脚本。
如果您能够澄清您的确切要求,那么更容易直接回答。
答案 1 :(得分:8)
Go二进制文件除了您可能在代码中强加的任何依赖项之外没有运行时依赖项。 (它的运行时库包含在已编译的可执行文件中。)
因此,您将按照从C,C ++或其他代码编译的任何其他二进制文件的方式分发您的应用程序。
在Linux上,您可以使用适当的工具创建.rpm或.deb文件。在Windows上,您可以使用InnoSetup等工具创建安装程序。
答案 2 :(得分:4)
Go生成一个二进制文件。如果您的外部依赖项是编译时依赖项,那么您的用户不需要担心它们 - 它们已经编译好了。
如果它们是运行时依赖项,那么分配exe和相关资源是一个问题,任何安装程序都可以为你做 - 无论exe是否用Go编写都是无关紧要的。 编辑:如果它绝对必须是单个二进制文件,即使运行时依赖项,那么您需要将运行时依赖项转换为编译时的依赖项。一种方法是elithrar建议的。
从Go的角度来看,您唯一需要担心的是您已经为您的用户平台编译了代码。