gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:46:19 25 4
gpt4 key购买 nike

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

  • 我首先想到使用 https://github.com/jteeuwen/go-bindata 来捆绑资源, 但由于文件 (~100) 的大小约为 20MB 左右,因此构建可执行文件需要很长时间。我认为只有一个可执行文件是人们下载可执行文件并运行它的一种简单方法。但似乎这不是一种有效的方法。

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

或者对此有其他策略吗?

谢谢

最佳答案

可能不符合真正的答案,但仍然......

  • 关于您的第 2 点,处理此问题的一种方法是利用 Go's way to do conditional compilation :您可以创建一组文件,例如 res_linux.gores_windows.go 等,并在每个文件中放置一组相同的变量,指向不同的位置,例如

    var InstallsPath = `C:\go-installs`

    res_windows.go

    var InstallsPath = `/usr/share/myapp`

    res_linux.go 等。然后在程序的其余部分,只需引用 res.InstallsPath 变量并使用 path/filepath包构建实际资源的完整路径名。

    当然,另一种方法是在 runtime.GOOS 上执行运行时切换变量——可能在其中一个源文件的 init() 函数中。

  • 将所有内容打包到一个zip 存档中,然后使用archive/zip 从中读取您的资源文件。 .这样,您只需分发两个文件——几乎“xcopy 部署”。

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

总而言之,如果这应该是FOSS的一部分的话,我会选择第一个变体,让下游包装商调整路径名。如果这是专有(或小众)软件,则第二个想法似乎还不错,因为您将自己扮演下游包装商的角色。

关于go - 分发 go 可执行文件的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22033434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com