分发go可执行文件的有效方法
我有一个go应用程序,它严重依赖静态资源,如图像和罐子。我想在linux、mac和windows等不同平台上安装go可执行文件分发go可执行文件的有效方法,go,installation,cross-platform,software-distribution,Go,Installation,Cross Platform,Software Distribution,我有一个go应用程序,它严重依赖静态资源,如图像和罐子。我想在linux、mac和windows等不同平台上安装go可执行文件 我首先想到使用绑定资源,但是由于文件(~100)的大小约为20MB,构建可执行文件需要很长时间。我认为拥有一个可执行文件是人们下载并运行可执行文件的一种简单方法。但这似乎不是一个有效的方法 然后我考虑为每个平台编写一个安装包,比如创建一个.rpm或.deb包?因此,这些包包含所有资源,并将其放入特定于平台的预定义位置,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()
- 将所有内容打包到
存档中,并使用从中读取资源文件。这样,您只需分发两个文件,几乎就是“xcopy部署” 请注意,在Windows上,您可以让可执行文件从自身的路径名(zip
)中提取目录,并假设资源文件位于POSIX平台(GNU/Linux和*BSD等)上的同一目录中资源文件仍应位于os.Args[0]
或(或)指定的类似位置,因此仍需要一些逻辑来定位该文件/usr/share/myapp