All possible GOOS value?

后端 未结 3 545
说谎
说谎 2021-01-30 12:25

If I get it right, GOOS is determined when compile the source code.

To better support multiple OS, I\'m interested in what GOOS could be.

相关标签:
3条回答
  • 2021-01-30 13:15

    You can see the list of supported platform by running:

    go tool dist list

    and this will print(depending on the Go version):

    android/386
    android/amd64
    android/arm
    android/arm64
    darwin/386
    darwin/amd64
    darwin/arm
    darwin/arm64
    dragonfly/amd64
    freebsd/386
    freebsd/amd64
    freebsd/arm
    linux/386
    linux/amd64
    linux/arm
    linux/arm64
    linux/mips
    linux/mips64
    linux/mips64le
    linux/mipsle
    linux/ppc64
    linux/ppc64le
    linux/s390x
    nacl/386
    nacl/amd64p32
    nacl/arm
    netbsd/386
    netbsd/amd64
    netbsd/arm
    openbsd/386
    openbsd/amd64
    openbsd/arm
    plan9/386
    plan9/amd64
    plan9/arm
    solaris/amd64
    windows/386
    windows/amd64
    

    And the official documentation for the tool:

    https://godoc.org/github.com/golang/go/src/cmd/dist

    To cross compile use:

    GOOS=darwin GOARCH=386 go build main.go
    
    0 讨论(0)
  • 2021-01-30 13:16

    Note that those values are defined in src/go/build/syslist.go.

    With Go 1.5 (Q3 2015), GOARCH will become much more complete.
    See commit 1eebb91 by Minux Ma (minux)

    go/build: reserve GOARCH values for all common architectures

    Whenever we introduce a new GOARCH, older Go releases won't recognize them and this causes trouble for both our users and us (we need to add unnecessary build tags).

    Go 1.5 has introduced three new GOARCHes so far: arm64 ppc64 ppc64le, we can take the time to introduce GOARCHes for all common architectures that Go might support in the future to avoid the problem.

    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)
    

    The list is still being review in Change 9644, with comments like:

    I wouldn't bother with Itanium. It's basically a dead architecture.
    Plus, it's so hard to write a compiler for it that I really can't see it happening except as a labor of love, and nobody loves the Itanium.

    The official documentation now (GO 1.5+ Q3 2015) reflects that completed list.


    Update 2018: as documented in Giorgos Oikonomou's answer, Go 1.7 (Q1 2016) has introduced the
    go tool dist list command.
    See commit c3ecded: it fixes issue 12270 opened in Q3 2015:

    To easier write tooling for cross compiling it would be good to programmatically get the possible combinations of GOOS and GOARCH.

    This was implemented in CL 19837

    cmd/dist: introduce list subcommand to list all supported platforms

    You can list in plain text, or in json:

    > go tool dist list -json
    [
            {
                    "GOOS": "android",
                    "GOARCH": "386",
                    "CgoSupported": true
            },
            ...
    ]
    

    As Mark Bates tweeted:

    Bonus: Column output properly formatted for display:

    go tool dist list | column -c 75 | column -t
    
    0 讨论(0)
  • 2021-01-30 13:26

    I think you're looking for this list of possible GOOS and GOARCH combinations, in this section:

    http://golang.org/doc/install/source#environment

    $GOOS and $GOARCH The name of the target operating system and compilation architecture. These default to the values of $GOHOSTOS and $GOHOSTARCH respectively (described below).

    Choices for $GOOS are darwin (Mac OS X 10.8 and above and iOS), dragonfly, freebsd, linux, netbsd, openbsd, plan9, solaris and windows. Choices for $GOARCH are amd64 (64-bit x86, the most mature port), 386 (32-bit x86), arm (32-bit ARM), arm64 (64-bit ARM), ppc64le (PowerPC 64-bit, little-endian), ppc64 (PowerPC 64-bit, big-endian), mips64le (MIPS 64-bit, little-endian), and mips64 (MIPS 64-bit, big-endian). mipsle (MIPS 32-bit, little-endian), and mips (MIPS 32-bit, big-endian).

    The valid combinations of $GOOS and $GOARCH are:

    $GOOS $GOARCH
    android   arm
    darwin    386
    darwin    amd64
    darwin    arm
    darwin    arm64
    dragonfly amd64
    freebsd   386
    freebsd   amd64
    freebsd   arm
    linux     386
    linux     amd64
    linux     arm
    linux     arm64
    linux     ppc64
    linux     ppc64le
    linux     mips
    linux     mipsle
    linux     mips64
    linux     mips64le
    netbsd    386
    netbsd    amd64
    netbsd    arm
    openbsd   386
    openbsd   amd64
    openbsd   arm
    plan9     386
    plan9     amd64
    solaris   amd64
    windows   386
    windows   amd64
    
    0 讨论(0)
提交回复
热议问题