2013-10-09 42 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的角度來看,您唯一需要擔心的是您已經爲您的用戶平臺編譯了代碼。