当前位置: 首页 > 面试题库 >

给定可执行文件,我可以确定用于构建它的GOOS和GOARCH的值吗?

司空赞
2023-03-14
问题内容

标题几乎总结了一下。如何确定仅go可执行文件才获得了GOOS和GOARCH的值?


问题答案:

编辑:runtime.GOROOT()在Go 1.10 中更改的行为,有关详细信息,请参见Go
1.10发行说明#Runtime
。现在基本上runtime.GOROOT()检查是否GOROOT设置了环境变量,如果已设置,则返回其值。如果不是,则返回GOROOT编译时记录的值。

检查runtime包装:

GOARCH,GOOS,GOPATH和GOROOT环境变量完善了Go环境变量集。它们会影响Go程序的构建(请参阅https://golang.org/cmd/go和https://golang.org/pkg/go/build)。
GOARCH,GOOS和GOROOT会在编译时记录下来, 并通过此包中的常量或函数提供,但它们不会影响运行时系统的执行。

GOARCH和的可能组合列表,GOOS可在以下位置找到:https
:
//golang.org/doc/install/source#environment

因此,您要查找的是runtime包中的常量:

runtime.GOOS
runtime.GOARCH

它们将完全包含构建您的应用程序时存在的值。

例如,请参见以下简单应用程序:

func main() {
    fmt.Println(runtime.GOOS)
    fmt.Println(runtime.GOARCH)
}

假设GOOS=windowsGOARCH=amd64。运行它将go run xx.go打印:

windows
amd64

从中构建一个exe(例如go build)。运行exe具有相同的输出。

现在更改GOARCH386。如果使用go run(或构建一个exe并运行它)运行它,它将显示:

windows
386

如果您运行以前构建的exe,它将仍然打印:

windows
amd64


 类似资料:
  • 我在Netbeans中创建了一个java项目,现在正处于构建阶段。我的项目中的所有东西都设置好了,我在它的属性中设置了一个主类,我甚至将我的项目设置为主项目。当我进行“清理和构建”时,会用我的。jar文件创建一个dist文件夹。但是,.jar文件是不可执行的,为什么呢?我打开了。jar文件并查看了清单,指定了一个main类,那么有什么问题呢?我运行的是Netbeans 7.3.1。谢了。

  • 问题内容: 如果我做对了,确定何时编译源代码。 为了更好地支持多种操作系统,我对可能的功能很感兴趣。 当然,由于Go是开源的,因此可能存在无限的可能性。因此,我真正想要的是一个“通用列表”。 已知值为: 或或?我知道其中至少必须存在一个。 问题答案: 请注意,这些值在中定义。 随着围棋1.5(Q3 2015年),将成为 很多 更加完整。 见提交1eebb91由Minux马() :为 所有 通用架构

  • 我想使用pyInstaller的单文件夹模式,但我不想每次都收集所有依赖项。 大多数情况下,我可以重用它以前打包的所有依赖项,我只需要可执行文件,我想如果我能在构建过程中尽快停止,我会在构建过程中节省10~20分钟。exe文件已生成。 我知道用-F标志将所有依赖项打包到一个可执行文件中,但这不是我想要的。我只希望pyInstaller在打包步骤之前停止。 我希望生成在可能输出时立即停止:

  • 问题内容: 简而言之,我需要能够将已编译的可执行文件粘贴到Java jar文件中,然后能够从Java运行它(可能通过)。 的 原因 ,是我想使用Java来包裹ImageMagick的可执行文件成分的图像处理弹性的Map Reduce任务。EMR只希望获取一个jar文件,因此我认为没有空间在旋转的数据节点上安装软件。 问题答案: jar中的可执行文件是一种资源,您可以通过Stream访问它,并将可执

  • 我正在使用JavaFX Gradle插件构建我的JavaFX应用程序。可以用不同的主类构建多个可执行文件吗?如果是,如何?

  • 我已经找了两天来解决这个问题,但我没有找到解决办法。首先我想构建fat-jar,然后我放弃了它看起来更复杂,所以我开始构建普通的可执行Jar。我正在用Gradle插件在NetBeans 8.2中构建一些程序(http://plugins.NetBeans.org/plugin/44510/gradle-support) 我的项目结构是这样的: 项目结构 我是一个比较新的年级,我使用它不到一个月。我