web-dev-qa-db-fra.com

Toute la valeur GOOS possible?

Si je comprends bien, GOOS est déterminé lors de la compilation du code source.

Pour mieux prendre en charge plusieurs systèmes d'exploitation, je suis intéressé par ce que GOOS pourrait être.

Bien sûr, il pourrait y avoir des possibilités infinies, car Go est ouvert. Donc ce que je veux vraiment, c'est une "liste commune".

Les valeurs connues sont:

  • windows
  • linux
  • darwin ou freebsd ou unix? Je sais qu'au moins l'un d'eux doit exister.
48
liuyanghejerry

Notez que ces valeurs sont définies dans src/go/build/syslist.go .

Avec Go 1.5 (Q3 2015), GOARCH deviendra beaucoup plus complet.
Voir commit 1eebb91 par Minux Ma (minux)

go/build: réserve GOARCH valeurs pour tous architectures courantes

Chaque fois que nous introduisons un nouveau GOARCH, les anciennes versions de Go ne les reconnaissent pas et cela cause des problèmes à nos utilisateurs et à nous (nous devons ajouter des balises de construction inutiles).

Go 1.5 a introduit jusqu'à présent trois nouveaux GOARCH: arm64 ppc64 ppc64le, nous pouvons prendre le temps d'introduire des GOARCH pour toutes les architectures courantes que Go pourrait prendre en charge à l'avenir pour éviter le problème.

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)

La liste est toujours en cours de révision dans Change 9644 , avec des commentaires comme:

Je ne m'embêterais pas avec Itanium. C'est fondamentalement une architecture morte.
De plus, il est si difficile d'écrire un compilateur pour cela que je ne peux vraiment pas le voir, sauf comme un travail d'amour, et personne n'aime l'Itanium.

La documentation officielle maintenant (GO 1.5+ Q3 2015) reflète cette liste complète.


Mise à jour 2018: comme documenté dans Giorgos Oikonomo 's answer , Go 1.7 (Q1 2016) a introduit le
go tool dist list.
Voir commit c3ecded : il corrige problème 1227 ouvert au troisième trimestre 2015:

Pour faciliter l'écriture d'outils pour la compilation croisée, il serait bon d'obtenir par programmation les combinaisons possibles de GOOS et GOARCH.

Cela a été implémenté dans CL 19837

cmd/dist: introduire la sous-commande list pour répertorier toutes les plateformes prises en charge

Vous pouvez lister en texte brut ou en json:

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

Je pense que vous recherchez cette liste de combinaisons possibles de GOOS et GOARCH, dans cette section:

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

$ GOOS et $ GOARCH Nom du système d'exploitation cible et de l'architecture de compilation. Ces valeurs par défaut sont respectivement les valeurs de $ GOHOSTOS et $ GOHOSTARCH (décrites ci-dessous).

Les choix pour $ GOOS sont darwin (Mac OS X 10.8 et supérieur et iOS), libellule, freebsd, linux, netbsd, openbsd, plan9, solaris et windows. Les choix pour $ GOARCH sont AMD64 (64 bits x86, le port le plus mature), 386 (32 bits x86), arm (32 bits ARM), arm64 (64 bits ARM), ppc64le (PowerPC 64 bits, petit -endian), ppc64 (PowerPC 64 bits, big-endian), mips64le (MIPS 64-bit, little-endian) et mips64 (MIPS 64-bit, big-endian). mipsle (MIPS 32 bits, petit-boutien) et mips (MIPS 32 bits, gros-boutien).

Les combinaisons valides de $ GOOS et $ GOARCH sont:

$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
37
Eve Freeman

Vous pouvez voir la liste des plateformes prises en charge en exécutant:

go tool dist list

et cela s'imprimera (selon la version Go):

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

Et la documentation officielle de l'outil:

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

Pour utiliser la compilation croisée:

GOOS=darwin GOARCH=386 go build main.go
16
georgeok