分发go可执行文件的有效方法

分发go可执行文件的有效方法,go,installation,cross-platform,software-distribution,Go,Installation,Cross Platform,Software Distribution,我有一个go应用程序,它严重依赖静态资源,如图像和罐子。我想在linux、mac和windows等不同平台上安装go可执行文件 我首先想到使用绑定资源,但是由于文件(~100)的大小约为20MB,构建可执行文件需要很长时间。我认为拥有一个可执行文件是人们下载并运行可执行文件的一种简单方法。但这似乎不是一个有效的方法 然后我考虑为每个平台编写一个安装包,比如创建一个.rpm或.deb包?因此,这些包包含所有资源,并将其放入特定于平台的预定义位置,go可执行文件可以引用它们。但唯一的问题是我必须在

我有一个go应用程序,它严重依赖静态资源,如图像和罐子。我想在linux、mac和windows等不同平台上安装go可执行文件

  • 我首先想到使用绑定资源,但是由于文件(~100)的大小约为20MB,构建可执行文件需要很长时间。我认为拥有一个可执行文件是人们下载并运行可执行文件的一种简单方法。但这似乎不是一个有效的方法

  • 然后我考虑为每个平台编写一个安装包,比如创建一个.rpm或.deb包?因此,这些包包含所有资源,并将其放入特定于平台的预定义位置,go可执行文件可以引用它们。但唯一的问题是我必须在go代码中处理它。我必须看看是不是windows,然后从c:\go安装加载文件,或者是linux,然后从/usr/local/share/go安装加载文件。我希望go代码尽可能不依赖于平台

还是有其他的策略


谢谢

可能不是真正的答案,但仍然

  • 至于你的观点№处理这个问题的一种方法是利用:你可以创建一组文件,比如
    res\u linux.go
    res\u windows.go
    等等,然后在每个文件中放置一组相同的变量,指向不同的位置,比如

    var InstallsPath = `C:\go-installs`
    
    resu窗口中,转到

    var InstallsPath = `/usr/share/myapp`
    
    res\u linux.go
    中,依此类推。然后在程序的其余部分中,只需引用
    res.InstallsPath
    变量,并使用包来构造实际资源的完整路径名

    当然,另一种方法是在一个源文件中的
    init()
    函数中执行运行时打开变量

  • 将所有内容打包到
    zip
    存档中,并使用从中读取资源文件。这样,您只需分发两个文件,几乎就是“xcopy部署”

    请注意,在Windows上,您可以让可执行文件从自身的路径名(
    os.Args[0]
    )中提取目录,并假设资源文件位于POSIX平台(GNU/Linux和*BSD等)上的同一目录中资源文件仍应位于
    /usr/share/myapp
    或(或)指定的类似位置,因此仍需要一些逻辑来定位该文件

总而言之,如果这应该是一部分,我会使用第一个变体,让下游的打包程序调整路径名。如果这是一个专有(或只是利基)的软件,第二个想法似乎是相当不错的,因为你将扮演下游包装自己的角色