2013-10-09 40 views
15

我已经在Go中编写了一个应用程序。它有两个外部依赖关系,在编译之前需要满足。在Go生态系统中,将此应用程序打包为简单安装过程的最佳方式是什么?包括安装这些远程代码?用户将如何安装我的应用程序?如何分发Go应用程序?

+0

什么是外部依赖?你是否期望用户编译或者正在讨论分发二进制文件? –

+0

我想分发一个二进制文件 – Carson

+1

@Carson只是二进制文件?当你说“外部依赖”时,你是否仅仅意味着第三方软件包(即'go get url.to/package/name')或者是否还有其他文件需要与二进制文件一起使用?明确。 – elithrar

回答

10
  • 如果你期待用户编译应用程序,而应用程序依赖于第三方软件包或资产,那么我建议只是交叉编译的支持平台,并提供二进制文件。

  • 如果你要提供旁边的应用资产(配置文件,例如),然后是:a)封装,资产和焦油/ ZIP它的二进制; b)base64对资产进行编码并将它们编译成二进制文件see here for a good example或者c)为用户创建一个构建/安装脚本。

如果你能澄清你的具体要求,它会更容易直接回答。

+1

特别针对构建/安装脚本+1。如果您可以在源代码发行版中包含合理智能的脚本(或Makefile),那么打包管理器将会更容易。 –

5

去除二进制文件之外没有任何运行时依赖关系,而不是您可能在代码中施加的任何依赖关系。 (它的运行时库包含在已编译的可执行文件中。)

因此,您将按照从C,C++或其他代码编译的任何其他二进制文件的方式分发应用程序。

在Linux上,您可以使用相应的工具创建.rpm或.deb文件。在Windows上,您可以使用像InnoSetup这样的工具创建安装程序。

4

Go产生一个二进制。如果你的外部依赖是编译时依赖,那么你的用户不需要担心它们 - 它们已经被编译进去了。

如果它们是运行时依赖关系,那么它是一个分发exe和相关的问题资源,任何安装程序都可以为你做 - 无论是否使用Go编写的exe都无关紧要。 编辑:如果绝对必须是一个单一的二进制文件,即使运行时依赖关系,那么你需要转换你的运行时依赖关系编译时间依赖关系。一种方法是elithrar建议的方法。

从Go的角度来看,您唯一需要担心的是您已经为您的用户平台编译了代码。