如果我理解正确,则在编译源代码时确定GOOS

为了更好地支持多种操作系统,我对GOOS可能感兴趣。

当然,由于Go是开源的,因此可能存在无限的可能性。因此,我真正想要的是一个“通用列表”。

已知值为:

  • windows
  • linux
  • darwinfreebsdunix吗?我知道其中至少必须存在一个。
  • 最佳答案

    请注意,这些值在 src/go/build/syslist.go 中定义。
    在Go 1.5(2015年第三季度)中,GOARCH将变得更加完整。
    参见commit 1eebb91Minux Ma ( minux )
    go/build:为所有常见架构保留GOARCH
    每当我们引入新的GOARCH时,旧的Go版本将无法识别它们,这给我们和我们的用户都造成了麻烦(我们需要添加不必要的构建标记)。
    到目前为止,Go 1.5已经引入了三个新的GOARCH:arm64 ppc64 ppc64le,我们可以花些时间为Go将来可能支持的所有常见架构引入GOARCH,以避免出现此问题。

    const goosList = "android darwin dragonfly freebsd linux nacl \
      netbsd openbsd plan9 solaris windows "
    
    const goarchList = "386 amd64 amd64p32 arm arm64 ppc64 ppc64le \
       mips mipsle mips64 mips64le mips64p32 mips64p32le \ # (new)
       ppc s390 s390x sparc sparc64 " # (new)
    
    该列表仍在Change 9644中进行审核,评论如下:

    我不会理会Itanium。基本上,它是一个死的架构。
    另外,很难为其编写编译器,以至于我真的看不到它的发生,除非是出于爱的劳动,而且没有人喜欢Itanium。

    现在的official documentation(GO 1.5+ Q3 2015)反映了已完成的列表。

    更新2018:如Giorgos Oikonomouanswer中所述,Go 1.7(2016年第一季度)引入了
    go tool dist list 命令。
    请参阅commit c3ecded:它修复了2015年第三季度打开的issue 12270:

    为了更轻松地编写用于交叉编译的工具,最好以编程方式获取GOOS和GOARCH的可能组合。

    这是在CL 19837中实现的
    cmd/dist:引入list子命令以列出所有支持的平台

    您可以用纯文本或json列出:
    > go tool dist list -json
    [
            {
                    "GOOS": "android",
                    "GOARCH": "386",
                    "CgoSupported": true
            },
            ...
    ]
    
    作为Mark Bates tweeted:

    奖励:列输出的格式正确,可以显示:
    go tool dist list | column -c 75 | column -t
    

    10-07 17:03