golang prend en charge multiplateforme. En raison de sa conception modulaire et de sa modularité, c'est-à-dire que le code est compilé et converti sous la forme binaire la plus petite possible, Golang ne nécessite aucune dépendance ; son code peut être compilé sur n'importe quelle plate-forme et peut être utilisé sur n'importe quel serveur et application. De plus, le langage Go possède son propre éditeur de liens et ne s'appuie sur le compilateur et l'éditeur de liens fournis par aucun système. Par conséquent, le fichier exécutable binaire compilé peut s'exécuter dans presque tous les environnements système ;
L'environnement d'exploitation de ce tutoriel : système Windows 7, GO version 1.18, ordinateur Dell G3.
golang prend en charge multiplateforme.
L'une des fonctionnalités de golang est : l'indépendance de la plateforme (compilation multiplateforme).
Le langage Go est comme le langage Java et prend en charge l'indépendance de la plate-forme. En raison de sa conception modulaire et de sa modularité, c'est-à-dire que le code est compilé et converti sous la forme binaire la plus petite possible, il ne nécessite donc aucune dépendance. Son code se compile sur n'importe quelle plateforme et sur n'importe quel serveur et application.
Pas besoin d'utiliser une machine virtuelle, le code du langage Go peut être directement généré sous forme de fichier exécutable binaire. De plus, le langage Go possède son propre éditeur de liens et ne s'appuie sur le compilateur et l'éditeur de liens fournis par aucun système. Par conséquent, le fichier exécutable binaire compilé peut s’exécuter dans presque tous les environnements système.
Golang, comme C/C++, est compilé dans des fichiers binaires liés à la plate-forme, donc lors du développement avec golang, vous devez également considérer la question de la prise en charge multiplateforme. Cet article résume brièvement comment Golang résout les problèmes multiplateformes.
GOOS et GOARCH
Tout d'abord, vous devez comprendre les deux variables d'exécution définies par golang dans le package d'exécution :
runtime.GOOS
runtime.GOOS
runtime.GOARCH
runtime.GOARCH
GOOS est le système d'exploitation de la machine cible sur laquelle le programme golang s'exécute, et GOARC est l'architecture de la machine cible sur laquelle le programme golang s'exécute. Leurs valeurs sont déterminées lors de la compilation du programme. Les définitions de ces deux variables d'exécution (en fait des constantes, voir ci-dessous) sont les suivantes :
// GOOS is the running program's operating system target: // one of darwin, freebsd, linux, and so on. const GOOS string = sys.GOOS // GOARCH is the running program's architecture target: // one of 386, amd64, arm, s390x, and so on. const GOARCH string = sys.GOARCH
Vous pouvez obtenir dynamiquement ces deux valeursau moment de l'exécution grâce au programme suivant,
package main
import (
"fmt"
"runtime"
)
func main() {
fmt.Printf("OS: %s, ARCH: %s\n", runtime.GOOS, runtime.GOARCH)
}
go build helloworld.go
En fait, résoudre ce problème est très simple, il suffit d'utiliser les deux variables d'exécution mentionnées ci-dessus. Par exemple, si vous disposez uniquement d'un environnement de compilation Linux, mais que vous souhaitez générer un fichier binaire pouvant s'exécuter sous Mac OS, il vous suffit de définir deux variables d'environnement. Si le système d'exploitation cible est Darwin et ARCH est amd64, utilisez la commande suivante pour compiler : $ GOOS=darwin GOARCH=amd64 go build helloworld.go
Rejoignez-vous et développez un package en Golang que d'autres personnes pourront utiliser , puis Comment faites-vous pour que votre package prenne en charge plusieurs plates-formes ? En fait, les développeurs n'ont généralement pas besoin de prendre en compte ce problème lors du développement d'applications générales, car la bibliothèque standard de Golang protège les détails sous-jacents.
Si vous souhaitez publier une version binaire, il vous suffit de publier une version prenant en charge plusieurs plates-formes via la compilation croisée ci-dessus.
Si le programme Golang que vous développez utilise des appels système de niveau relativement bas (bien sûr, cela n'est généralement pas recommandé) et que les appels système des différentes plates-formes sont différents, vous devez alors considérer la question de la prise en charge de plusieurs plates-formes. Vous pouvez déterminer dynamiquement les valeurs de runtime.GOOS et runtime.GOARCH dans le programme, puis les gérer via des instructions if-else if ou switch case, mais ce n'est pas une méthode souhaitable car elle n'est pas propice à la maintenance et rend ; le code a l'air moche. L'approche recommandée consiste à placer les implémentations des différentes plates-formes dans différents fichiers, puis à indiquer au compilateur Golang à quelle plate-forme correspond chaque fichier. Il existe deux méthodes ici. La première méthode consiste à l'indiquer par le nom de fichier. Le modèle de nom de fichier est le suivant :*_[GOOS]_[GOARCH].go
yourfile_darwin.go yourfile_linux.go yourfile_windows.go
另外一种办法是通过一个特殊的注释。例如,假设你想使yourfile.go只在linux平台时才会编译,那么在文件头加上"+build linux"即可:
// +build linux ......
这里一定要注意,"+build linux"必须在所有代码的前面,但这条注释之前可以有空行或其它注释。它之后必须有一个空行。
这种通过注释的方式和通过文件名标示的方式作用相同,但是文件名的方式只能支持一个平台,而注释的方式可以标示一个文件同时支持多个平台,例如下面的注释标示该文件同时支持freebsd, openbsd和netbsd这三个平台:
// +build freebsd openbsd netbsd
注意多个平台之间用空格隔开时表示"或"的关系,如果用逗号隔开则表示"与"的关系,例如下面的注释表示 (linux AND 386) OR darwin:
// +build linux,386 darwin
这里只是介绍了最基本的使用场景,实际使用中,应该充分发挥软件设计的各种思想灵活使用。例如虽然针对不同的平台有不同的实现,但给上层客户端应用程序提供API应该统一。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!